我想创建具有固定长度的空数组,然后在其上使用.map
返回新数组。但是,它没有按预期工作。
根据mdn docs:
如果传递给Array构造函数的唯一参数是0到232-1(含)之间的整数,则返回一个长度设置为该数字的新JavaScript数组。
new Array(3)
返回[undefined × 3]
。不应该是:[undefined, undefined, undefined]
?
让我们考虑以下示例:
1)不能正常工作。
var a = new Array(3);
a.map((x, i) => i); // [undefined × 3]
2)工作。
var a = Array.apply(null, new Array(3));
a.map((x, i) => i); // [0, 1, 2]
我在最新的Google Chrome Canary上进行了测试。
答案 0 :(得分:3)
来自MDN:this returns a new JavaScript array with length set to that number
由new Array(n)
创建的数组没有任何元素,只有一个长度。这就是为什么你不能映射(不存在)元素的原因。
答案 1 :(得分:1)
map
按设计跳过未定义的元素。
仅对已分配值的数组的索引调用
callback
这里有很多与此主题相关的问题,并提供了创建数组的方法,地图将对所有元素进行操作,例如
new Array(3) . fill() . map(...
仅举一个例子,使用新的Array#fill方法。
答案 2 :(得分:0)
CodeiSirs补充说明的一个例子:
// foo and bar are identical. They are arrays with length 3 and no indices.
var foo = new Array(3);
var bar = [];
bar.length = 3;
console.log(foo);
console.log(bar);
// This is different. It has 3 indices with the value undefined.
var pez = [undefined, undefined, undefined];
console.log(pez);

控制台显示new Array(3)
有点奇怪,因为它与[undefined, undefined, undefined]