让我们说你新建了一个包含1,000个元素的数组,并希望使用.map()
将每个元素的索引指定为元素的值。我希望它能像这样工作:
new Array(1000).map((element, i) => i);
问题在于:尽管将.map()
的返回值指定为数组索引,但返回的新数组虽然具有所需的1,000个元素,但仍为空。这可以通过链接.fill(0)
来解决,如下所示:
new Array(1000).fill(0).map((element, i) => i);
为什么.map
或.filter
需要填充数组来生成填充数组?
答案 0 :(得分:1)
主要是因为必须填充数组,即使使用未定义的指针也要进行迭代。使用new Array()
时不是。
从MDC(强调我的):" map按顺序为数组中的每个元素调用一次提供的回调函数,并从结果中构造一个新数组。仅对已分配值的数组的索引调用回调;对于已删除或从未分配过值的索引,不会调用它。"
根据该主题的接受答案的第一条评论:
JavaScript "new Array(n)" and "Array.prototype.map" weirdness
答案 1 :(得分:1)
要使其正常工作,您可以使用ECMA6中的传播运算符
console.log([...new Array(1000)].map((element, i) => i))