精华内容
下载资源
问答
  • 创建一个长度为5的数组
    千次阅读
    2020-03-11 20:05:52
    var arr = [1,2,3,4,5,6]
    
    const arr2 = new Array(arr.length).fill(0)

     

    更多相关内容
  • 不使用loop循环,创建一个长度为100的数组,并且每个元素的值等于它的下标 这个问题的一些变种例如给一个长度length和value,返回长度为length值全为value的数组等。 1.误区 最容易掉入陷阱的: var arr = new...

    原题描述:

    不使用loop循环,创建一个长度为100的数组,并且每个元素的值等于它的下标

    这个问题的一些变种例如给一个长度length和value,返回长度为length值全为value的数组等。

    1.误区

    最容易掉入陷阱的:

    var arr = new Array(100);
    arr = arr.map(function(item, index) {
    return index;
    });

    如果你的答案是这个,恭喜你成功掉入出题人的坑了。

    2.解释

    坑在Array(100),可以看看MDN的规范,
    这里写图片描述
    new Array(100)返回的是一个什么都没有的“稀疏数组”,其实我觉得这个答案可以看做是浏览器显示处理的Bug。

    在47版本Chrome下(或者早些的Chrome版本),new Array(10)会返回[undefined,undefined,undefined,…….(100)],但这个undefined又跟你直接声明的[undefined,undefined,undefined,…….(100)]不同(都是47版本的Chrome),测试:
    这里写图片描述

    这里写图片描述

    看出来了把,这个就是以前浏览器的显示Bug,后来修复了也就是现在显示的empty,用来区别undefined,表明这个和undefined是不一样的。

    上面提到的Array()创建的是稀疏数组(Sparse Array),在一些资料中是这样说的,但是在js里随便创建个数组都可以是「稀疏」的吧(因为实际上就是 Object ?)

    a = new Array(2); a[1] = 1; a;  // (2) [undefined × 1, 1]
    b = []; b[4] = 5; b[9] = 10;
    b;  // (10) [undefined × 4, 5, undefined × 4, 10]
    而 JS 对于这类数组,由于上述规范的定义,遍历的时候会跳过空的地方
    a.map(e => 2*e)  //(2) [undefined × 1, 2]

    JS 引擎对于稀松数组是用字典保存的,能省一些空间,但是在索引方面肯定是比 Full Array 吃亏了。所以 JavaScript 不把 new Array 设计成全用 undefined 填满,有点反直觉。

    以上是一种解释,另一种不用稀疏数组来解释:

    对于 new Array(2),它实际上返回的是一个长度为 2,里面什么都没有的数组。即对应empty字面表现的意义。

    根据 ECMA-262 6th edition,即 ES6 规范 22.1.1.2 小节 Array (len), Array(len) 仅仅就是给新数组设了个 length 属性而已,其他什么也没做……而对于 JS 数组的索引,就算是数组越界了,也都是返回 undefined:

    new Array(2)[999] === undefined // true

    能影响到 Array.prototype.map() 的原因是因为,根据规范 22.1.3.15 小节 Array.prototype.map ( callbackfn [ , thisArg ] ),map 函数会先检查 HasProperty。要 map,首先这个元素/属性要存在。可是:

    new Array(2).hasOwnProperty(0) // false
    [undefined, undefined].hasOwnProperty(0) // true

    所以,传给 map 的 callback 其实根本就没执行,可以测试

    new Array(2).map(e => console.log('done'))  

    会发现啥也没 log 出来。

    这个“bug”在edge和Safari也发现过。

    3.正确的解决

    扯了那么多,那么这道题应该怎么做呢。

    其实这道题的面试官当时是说不用loop的情况下的解决方案,用Array方法的话其实都是属于loop,目的是考察递归:

    1. 递归+自执行函数
    var arr = [];
    
    (function dfs(i) {
      if (i < 100) {
        arr.push(i);
        dfs(++i);
      }
    }(0));
    2. 转化成字符串
    Array(100).join(",").split(",").map(function(key,index){return index;})
    3. apply转换一下,可以看到js的大多数坑的解决都有apply的身影。。。
    Array.apply(null,Array(100)).map((item,index)=>index)

    apply在es5可以加类数组对象,在传入的时候,由于每一项的值都是不存在的,相当于进去的是 undefined(这里的undefined是真真切切的undefined。。。)

    4. Int8Array
    new Int8Array(100).map((item,index)=>index);

    Int8Array的规范看相关文档把

    5.讨论的时候B大给的两个最骚的解法。。。

    这里写图片描述

    这里写图片描述

    第二种都看得懂把,第一种新手还是不好理解的,这里解释一下:

    1、 js 里的 + 号在不同表达式里有不同含义
    2、在这里,是加号
    3、加号后面跟一个数组,触发了隐式转换
    4、数组的隐式转换包含两个,toString 和 valueOf,根据数组的隐式转换规则,这里调用 valueOf
    5、但是 ary 的 valueOf 被改写了,改成了看到的那个函数,那个函数里每次会给 ary 新加一个与下标相同的元素
    6、 如果下标还没到 100,就再 +ary 一次,相当于又调用了一次 valueOf
    7、于是就形成了递归

    其他的
    Object.keys(Array(100).toString().split(","))
    
    function genArr(i, arr){
        if(i < 10){
            arr[i] = i++
            return genArr(i, arr);
        } else {
            return arr;
        }
    }
    var arr = genArr(0, [])
    
    var a =[],b= function () { return a.length<100?(a.push(a.length)&&arguments.callee()):a }(); console.log(a,b);
    
    
    [...Array(10).keys()]
    
    Array(100).fill().map((v, i) => i)

    4.问题的升级

    题目改成100w,百万级的数组,怎么生成快?
    关键词:弄个 getter setter ,惰性求值

    5.求是求真

    以上的问题可以看V8的源码,不看源码的时候,只能确定行为,谁解释都有一套。
    v8源码链接:链接
    stackoverflow的讨论:链接

    展开全文
  • js创建一个指定长度数组

    万次阅读 2020-07-29 14:32:43
    let array = new Array(9).fill('') //fill:使用固定值填充数组
    const array = new Array(9).fill('')
    
    //fill:使用固定值填充数组
    
    Array.from({length: 5}, (v, i) => i);
    // [0, 1, 2, 3, 4]

    展开全文
  • 问题描述:在不使用循环的条件下,如何创建一个长度为100的数组,并且数组的每一个元素是该元素的下标? 结果: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, ...

    问题描述:在不使用循环的条件下,如何创建一个长度为100的数组,并且数组的每一个元素是该元素的下标?

    结果为:

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

     

    方法一:  Array.keys()

       var arr = new Array(100).keys();
       console.log(Array.from(arr));

    方法二:  Array.from()

      var arr = Array.from({length:100}, (v,k) => k);
       console.log(arr);

    方法三: 使用...扩展运算符

       var arr = [...Array(100).keys()];
       console.log(arr);

    方法四: Object.keys() 与 Array.from()

       var arr = Object.keys(Array.from({length:100}));
       console.log(arr);

    这种方式创建的是一个字符串数组,所以需要转一下

       var arr = Object.keys(Array.from({length:100})).map(function(item){
           return +item;
       });
       console.log(arr);

    +号是一个转换格式的小技巧,你也可以使用parseInt

     

    转载于:https://www.cnblogs.com/zhaoxiaobei/p/10739890.html

    展开全文
  • 创建一个长度为6的数组并随机赋值

    千次阅读 2020-01-15 21:10:33
    创建一个长度为6的int型数组, 要求数组元素的值都在1-30之间,且是随机赋值。同时要求元素的值各不相同 /* * 创建一个长度为6的int型数组, * 要求数组元素的值都在1-30之间, * 且是随机赋值。同时要求元素的值...
  • - Array(5).map(val => ({})) 生成 empty 数组 - Array(5).forEach(val => ({})) 生成 empty 数组 - Array(5).fill({}) 生成 要求数组 - Array(5).fill() 生成 undefined 数组 - ...
  • const array = new Array(100).fill('') Array.from(new Array(100).keys()) let arr = Array.from({length:100}, (_v,k) => k); console.log(arr);
  • 快速创建固定长度数组

    千次阅读 2021-06-05 14:48:02
    快速创建固定长度数组的几个方法第一种:第二种:第三种: 第一种: // new一个长度10 的数组, 去keys遍历出来 const arr = [...(new Array(10)).keys()] console.log("arr: ", arr); // arr: [ 0, 1, 2, 3, 4, 5...
  • public class 遍历数组 { public static void main(String[] args) { int a[]=new int[5]; a[0]=(int) (Math.random() * 100); a[1]=(int) (Math.random() * 100); a[2]=(int) (Math.random() * 100); a[3]=...
  • 创建指定长度指定内容的数组

    千次阅读 2019-11-03 17:18:42
    一个参数对象,仅一个属性length,指定了第二个参数运行的次数; 第二个参数回调函数,回调函数有两个参数,分别是数组元素、下标,实现对数组元素值的设置,元素值默认undefined; 案例如下: Array.from...
  • 1、 const arr = Array(10).fill(10).map((item, ...arr::: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] 2、 const arr = [...(new Array(10)).keys()] console.log("arr::: ", arr); arr::: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
  • js创建指定长度数组

    千次阅读 2020-11-23 11:19:14
    const array = new Array(9).fill('') //fill:使用固定值填充数组
  • 本篇涉及知识点:数组、方法、Scanner、for循环。
  • C++创建自定义长度数组小技巧

    千次阅读 2021-09-05 20:01:55
    大家都知道C++如果直接创建数组,必须要指定数组长度,而有时候所需要数组长度不是固定的,比如我需要从控制台输入一个数,创建这个数的长度数组,那该怎么办呢?这里教大家一个小技巧,话不多说直接上代码。 ...
  • JS创建长度为100的数组,数值下标

    千次阅读 2019-10-04 16:26:13
    var arr1 = new Array(100) for (var i = 0; i < arr1.length; i++) { arr1[i] = i } console.log(arr1) var arr2 = Array.from({length: 100}, (v, k) => k) ...var arr3 = Array.from...
  • java创建数组时定义数组长度

    千次阅读 2019-11-21 15:59:22
    直接看案例: Double[] d = new Double[6]; 这里定义了一个double类型的数组,定义数组长度为6
  • 您可以尝试使用^{} module来指定数组的类型:import arraya = array.array('i') #...如果需要一个由10个整数元素组成的数组,每个元素零,可以执行以下操作:a = array.array('i', [0]*10)如文档中所述,'i'强制数...
  • Java创建指定长度数组

    千次阅读 2021-10-08 15:34:43
    1 需要创建一个为10的Object类型的数组 Object[] objects = new Object[10];
  • 输入createArr(3, 'abc')...2.创建一个addEle函数用于给数组添加元素 3.判断count是否0,不0时给数组尾部添加元素,使count - 1 4.调用addEle函数,把变化后的count传入,进行递归过程如下: 结果如下: 2.fill() ...
  • 我想知道是否(以及如何)在python中创建空的c类型数组。如果要用零初始化数组,以下代码可以正常工作:from ctypes import *data = [0 for i in xrange(10)]a = ((c_float *10))(*data)但是,...在编辑1:我想要一个...
  • 最近做项目发现,越是简单的...好了被绕晕没有,有的话思考一下这个问题,怎么创建一个长度为n的有序数组,像这样[0,1,2,3,4,5,…]。很简单的问题是不是你可能直接这样let arr = []for (let i = 0, len = 10; i ; i++
  • 首先规定数组 ...思路,利用for循环嵌套结构,第层for循环为数组元素的输入,第二层for循环判定是否有重复值,如果重复值则赋值循环的当前位数舍弃,重新赋值。 for(int i=0;i<value.length;i++){ .
  • java 定义一个未知长度数组

    千次阅读 2021-11-29 11:23:43
    ,就可以在程序运行的时候动态定义一个数组 下面是示例代码: public class Test { public static void main(String[] args) { String[] strArray = createArray(5); } static String[] createArray(int ...
  • java编程输入一个长度未知的int数组

    万次阅读 多人点赞 2019-02-13 19:32:58
    java编程输入一个长度未知的int数组 思路:  java中可以直接输入字符串数组,但是输入int[] 数组时需要事先定义长度,但有些题目中的长度是可变的,不能事先固定数组长度。首先输入字符串的数组,中间用空格分隔,...
  • 1.Object.keys和Array.apply和map var arr = Object.keys(Array.apply(null, { length: 100 })).map(function( item ) { return +item;... 5. Array.apply(null, { length: 100 }).fill(0);
  • 方法:推荐 public class Test { public static void main(String[] args) { int[] arr = new int[6];//动态初始化数组 for (int i = 0; i < arr.length; i++) { arr[i] = (int) (Math.rand...
  • //随机长度数组 for (int i = 0; i ; i++) { arr[i] = new Random().nextInt(1000);//数组元素取值范围 } return arr; } private static void sort(int[] a){ for (int i = 0; i ; i++) { ...
  • package ok; ...//将数组转化字符串 } public int[] getArray(int length) { int[] nums=new int[length]; for(int i=0;i;i++) {nums[i]=(int)(Math.random()*100);} return nums; } }
  • 这是我一道很早接触的题目,整理过几次都觉得不够好。原出题人主要靠对es6语法的掌握,结果知乎...// 先创建一个100的稀疏数组 let temp = Object.keys(Array.apply(null, {length:100})) let arr = temp.ma...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 622,846
精华内容 249,138
关键字:

创建一个长度为5的数组

友情链接: trigger_update-score.rar