使用空元素迭代Array(ES6)

时间:2016-07-02 16:47:34

标签: javascript arrays ecmascript-6 undefined

我有一个指定长度的数组,我试图用依赖于每个索引的值填充它。

let arr = new Array(someLength)
arr.map((v, i) => i * 2)

据我所知,这不起作用,因为map 跳过未定义的值。

我有几个问题:

  1. 为什么map适用于[undefined, undefined]
  2. 之类的内容
  3. 无论如何使用ES6数组方法完成此操作?

    我知道我可以使用标准for循环,但想知道是否有更好的方法。

    for (let i = 0; i < arr.length; i++) { 
       arr[i] = i * 2 
    }
    

    到目前为止,我找到了一种方法,但它并不是很干净。

    arr = arr.fill(undefined).map((foo, i) => i * 2)
    

3 个答案:

答案 0 :(得分:8)

  
      
  1. 为什么.map适用于[undefined, undefined]
  2. 之类的内容   

考虑这两种情况

let a1 = [];
a1.length = 2;
a1; // [undefined × 2]

// vs

let a2 = [undefined, undefined];
a2; // [undefined, undefined]

每个Object.keys的结果是什么?

Object.keys(a1); // []
Object.keys(a2); // ["0", "1"]

所以,我们可以看到两者之间的区别 - 一个已经初始化了键,另一个没有

  
      
  1. 无论如何使用ES6阵列方法完成此任务?
  2.   

您已指出.fill,您也可以使用Array.from

Array.from({length: 5}, (itm, idx) => 2 * idx); // [0, 2, 4, 6, 8]

答案 1 :(得分:1)

您可以生成一个undefined值的数组。

Array.apply(null, {length: 5})

并将其用于映射。

&#13;
&#13;
var array = Array.apply(null, {length: 5});
console.log(array);

array = array.map((_, i) => 2 * i);
console.log(array);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

你只需要用0填充数组。然后你可以使用map或forEach进行处理:

var arr = new Array(5); //[,,,,,]
arr.fill(0).forEach((v, i, tab) => {tab[i] = i * 2}); // [ 0, 2, 4, 6, 8 ]