即使.forEach在出现情况下看起来更合乎逻辑,我也可以一直使用.map吗?

时间:2016-06-30 08:32:33

标签: javascript

我看到.map().forEach()在大多数情况下的工作方式类似,但我知道.map()更适合根据转换输入返回一些结果,而.forEach()只是迭代项目并对每个项目应用一些操作。

我知道在这种情况下它很适合:

var customersList = dataItems.map(function (item) {
    return item.isCustomer
})

但我发现将.forEach()抛出脑袋更容易,只需在我的所有代码中使用.map()。在这样的情况下使用.map()在概念上是否正确?

domElements.map(function (el) {
    if (el.enabled) {
        el.show()
    } else {
        el.hide()
    }
})

2 个答案:

答案 0 :(得分:2)

你可以。但你不应该。

这是轻微的性能损失,但更重要的是它也是一个维护负担。如果我必须来维护你的代码,我会认为出现了问题,或者需要花费更长的时间来查看那段代码来衡量意图。为什么map?它应该归还吗?我不正确理解吗?

这是一个比表现更重要的问题。

答案 1 :(得分:0)

正如有人在评论中指出的那样,map()的性能会降低,因为它会返回一个新数组。一个没有显式返回任何内容的函数实际上返回undefined,因此你的map将返回一个未定义数组,其元素数与原始数组相同。

如果您不想在每次需要迭代数组时记住或谷歌查看所有这些方法,只需坚持使用旧的for循环,无论如何都要快得多。如果您关心性能,可以写下如下内容:

for (var i = 0, len = arr.length; i < len; i++)

几乎与向后循环一样快。