javascript - JavaScript forEach 方法有什么用(map 做不到)?

标签 javascript arrays dictionary foreach prototype

我在 map 和 foreach 中看到的唯一区别是 map 返回一个数组而 forEach 不是。但是,我什至不理解forEach 方法的最后一行“func.call(scope, this[i], i, this);”。例如,不是“this”和“scope”指的是同一个对象,也不是this[i] i 指的是循环中的当前值?

我注意到在另一篇文章中有人说“当你想在列表的每个元素的基础上做某事时使用 forEach。例如,你可能会向页面添加东西。本质上,当您想要“副作用”时,它非常有用。我不知道副作用是什么意思。

Array.prototype.map = function(fnc) {
    var a = new Array(this.length);
    for (var i = 0; i < this.length; i++) {
        a[i] = fnc(this[i]);
    }
    return a;
}

Array.prototype.forEach = function(func, scope) {
    scope = scope || this;
    for (var i = 0, l = this.length; i < l; i++) {
        func.call(scope, this[i], i, this);
    }
}

最后,除了像下面这样操作数字之外,JavaScript 中的这些方法是否有任何实际用途(因为我们没有更新数据库)?

alert([1,2,3,4].map(function(x){ return x + 1})); // This is the only example I ever see of map in JavaScript.

最佳答案

在您的示例中,mapforEach 之间的本质区别是 forEach 对原始数组元素进行操作,而 map 结果显式返回一个新数组。

使用 forEach,您将对原始数组中的每个元素采取一些行动,并可选择更改这些元素。 forEach 方法运行您为每个元素提供的函数,但不返回任何内容 (undefined)。另一方面,map 遍历数组,对每个元素应用一个函数,然后将结果作为新数组发出

forEach 的“副作用”是改变了原始数组。 map 的“无副作用”意味着,在惯用用法中,原始数组元素没有改变;新数组是原始数组中每个元素的一对一映射——映射转换是您提供的函数。

事实上,不涉及数据库并不意味着您不必对数据结构进行操作,毕竟,这是任何语言编程的本质之一。至于你最后一个问题,你的数组不仅可以包含数字,还可以包含对象、字符串、函数等。

关于javascript - JavaScript forEach 方法有什么用(map 做不到)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3034392/

相关文章:

python - Pandas 按一天中的小时分组到字典

javascript - React Mix ClassName 类和 Prop

javascript - 使用JavaScript/jQuery从数组填充列表,并在“加载更多”按钮单击时加载更多元素?

java - 返回数组中整数的第一个数字

python - 是否可以在defaultdict中调用迭代器来获取下一个键值?

python - DataFrame 的字典列表

javascript - 使用正则表达式匹配多个结果

javascript - 如何调整背景图像的大小以匹配 Canvas ? FabricJS

javascript - Highcharts 自定义符号图例

arrays - 为什么我不能以这种方式进行计数排序?