gpt4 book ai didi

javascript - 'new Array' 上的 forEach 没有按照我的预期进行

转载 作者:数据小太阳 更新时间:2023-10-29 05:19:02 25 4
gpt4 key购买 nike

我刚刚在学习如何使用 JS 高阶函数(map、forEach、reduce 等),并且陷入了困惑。我正在尝试编写一个简单的“范围”函数,但似乎无法填充我的输出数组。这是目标:

range(1, 4) // [1, 2, 3, 4]

我明白了:

[undefined × 4]

这是我的代码:

 function range(num1, num2) {
var rangeArr = new Array((num2 + 1) - num1);
return rangeArr.map(function(e, i, arr) {return arr[i] = num1 + i});
}

我在这里错过了什么?据我所知,这个问题似乎与我使用“新阵列”的方式有关,但除此之外我就迷路了。

哦,这是真正让我困惑的部分。这很好用:

function bleck() {
var blah = [1, 2, 3, 4];
var x = 'wtf';
return blah.map(function(e, i, arr) {return arr[i] = x})
}

["wtf", "wtf", "wtf", "wtf"]

谢谢!!

最佳答案

forEach 方法迭代数组的索引。有趣的是,当您通过 new Array(n) 创建一个新数组时,它包含根本没有索引。相反,它只是设置其 .length 属性。

> var a = new Array(3);
> console.info(a)
[]
> console.info([undefined, undefined, undefined])
[undefined, undefined, undefined]

MDN描述了 forEach,并特别指出:

forEach executes the provided callback once for each element of the array with an assigned value. It is not invoked for indexes which have been deleted or elided.

这里有一个巧妙的技巧,可以获取具有空但已存在的索引的数组。

var a = Array.apply(null, Array(3));

这是有效的,因为 .apply 将省略的元素“扩展”为适当的参数,结果最终类似于 Array(undefined, undefined, undefined)

关于javascript - 'new Array' 上的 forEach 没有按照我的预期进行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23281565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com