即使.foreach在某些情况下看起来更合乎逻辑,我也可以总是使用.map吗?

Can I always use .map even if .forEach looks more logical in come circumstances?

本文关键字:也可以 map foreach 情况下 合乎逻辑 看起来 即使      更新时间:2023-09-26

我看到.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()
    }
})

可以。但是你不应该。

它对性能的影响很小,但更重要的是它也是一个维护负担。如果我必须参与并维护您的代码,我会认为有些地方出了问题,或者必须花更长的时间查看那段代码以判断意图。为什么是map ?它应该返回什么东西吗?我理解错了吗?

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

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

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

几乎和反向循环一样快