迭代具有空元素的数组 (ES6)
Iterate over Array with empty elements (ES6)
我有一个指定长度的数组,我试图用依赖于每个索引的值填充它。
let arr = new Array(someLength)
arr.map((v, i) => i * 2)
据我所知,这不起作用,因为 map
跳过 未定义的值。
我有几个问题:
- 为什么
map
可以处理 [undefined, undefined]
之类的东西?
有没有办法使用 ES6 数组方法来完成这个?
我知道我可以使用标准的 for
循环,但想知道是否有 更好的 方法来做到这一点。
for (let i = 0; i < arr.length; i++) {
arr[i] = i * 2
}
到目前为止我找到了一种方法,但它不是很干净。
arr = arr.fill(undefined).map((foo, i) => i * 2)
- Why does
.map
work on something like [undefined, undefined]
?
考虑这两种情况
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"]
所以,我们可以看出两者之间的区别——一个有初始化密钥,另一个没有
- Is there anyway to accomplish this using ES6 array methods?
你已经指出了.fill
,你也可以使用Array.from
Array.from({length: 5}, (itm, idx) => 2 * idx); // [0, 2, 4, 6, 8]
您可以生成一个包含 undefined
个值的数组。
Array.apply(null, {length: 5})
并将其用于映射。
var array = Array.apply(null, {length: 5});
console.log(array);
array = array.map((_, i) => 2 * i);
console.log(array);
您只需要用 0 填充数组。然后您可以像这样使用 map 或 forEach 进行处理:
var arr = new Array(5); //[,,,,,]
arr.fill(0).forEach((v, i, tab) => {tab[i] = i * 2}); // [ 0, 2, 4, 6, 8 ]
我有一个指定长度的数组,我试图用依赖于每个索引的值填充它。
let arr = new Array(someLength)
arr.map((v, i) => i * 2)
据我所知,这不起作用,因为 map
跳过 未定义的值。
我有几个问题:
- 为什么
map
可以处理[undefined, undefined]
之类的东西? 有没有办法使用 ES6 数组方法来完成这个?
我知道我可以使用标准的
for
循环,但想知道是否有 更好的 方法来做到这一点。for (let i = 0; i < arr.length; i++) { arr[i] = i * 2 }
到目前为止我找到了一种方法,但它不是很干净。
arr = arr.fill(undefined).map((foo, i) => i * 2)
- Why does
.map
work on something like[undefined, undefined]
?
考虑这两种情况
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"]
所以,我们可以看出两者之间的区别——一个有初始化密钥,另一个没有
- Is there anyway to accomplish this using ES6 array methods?
你已经指出了.fill
,你也可以使用Array.from
Array.from({length: 5}, (itm, idx) => 2 * idx); // [0, 2, 4, 6, 8]
您可以生成一个包含 undefined
个值的数组。
Array.apply(null, {length: 5})
并将其用于映射。
var array = Array.apply(null, {length: 5});
console.log(array);
array = array.map((_, i) => 2 * i);
console.log(array);
您只需要用 0 填充数组。然后您可以像这样使用 map 或 forEach 进行处理:
var arr = new Array(5); //[,,,,,]
arr.fill(0).forEach((v, i, tab) => {tab[i] = i * 2}); // [ 0, 2, 4, 6, 8 ]