gpt4 book ai didi

javascript - Array.prototype.map() 和 Array.prototype.forEach()

转载 作者:可可西里 更新时间:2023-11-01 02:41:07 25 4
gpt4 key购买 nike

我有一个数组(下面的示例数组)-

a = [{"name":"age","value":31},
{"name":"height (inches)","value":62},
{"name":"location","value":"Boston, MA"},
{"name":"gender","value":"male"}];

我想遍历这个对象数组并生成一个新对象(不是特别减少)。

我有这两种方法 -

a = [{"name":"age","value":31},
{"name":"height (inches)","value":62},
{"name":"location","value":"Boston, MA"},
{"name":"gender","value":"male"}];

// using Array.prototype.map()
b = a.map(function(item){
var res = {};
res[item.name] = item.value;
return res;
});
console.log(JSON.stringify(b));

var newObj = [];
// using Array.prototype.forEach()
a.forEach(function(d){
var obj = {};
obj[d.name] = d.value;
newObj.push(obj)
});
console.log(JSON.stringify(newObj))

在这种操作中只使用其中一个是不对的吗?另外,我想了解一个优先于另一个的用例场景?还是我应该坚持使用 for 循环?

最佳答案

正如您已经在评论中讨论过的那样,这里没有完全错误的答案。除了一些相当不错的性能点外,这是一个风格问题。您正在解决的问题可以通过 for 循环、.forEach().reduce().map 来解决()

我故意按这个顺序列出它们,因为它们中的每一个都可以使用列表前面的任何东西重新实现。例如,您可以使用 .reduce() 来复制 .map(),但不能反过来。

在您的特定情况下,除非微优化对您的域至关重要,否则我会根据可读性和代码维护做出决定。在此基础上,.map() 会具体而准确地完成您所追求的;阅读您的代码的人会看到它并且知道您正在使用一个数组来生成另一个数组。您可以使用 .forEach().reduce() 来完成,但是因为它们能够用于更多的事情,所以必须有人花额外的时间来理解你用它们做什么。 .map() 是最能表达您的意图的调用。

(是的,这实质上意味着理解效率优先于执行效率。如果代码不是高需求应用程序中性能瓶颈的一部分,我认为这是合适的。)

您询问了可能首选另一个的场景。在这种情况下,.map() 可以工作,因为您正在输出一个数组,并且您的输出数组的长度与输入数组的长度相同。 (同样;这就是 .map() 所做的)。如果你想输出一个数组,但你可能需要为单个输入元素生成两个(或零个)输出元素,.map() 将不可用,我可能会使用 .reduce()。 (链接 .filter().map() 也可能用于“跳过一些输入元素”的情况,并且非常清晰)

如果你想将输入数组的内容拆分为多个输出数组,你可以使用 .reduce() 来实现(通过将它们全部封装为单个对象的属性),但是.forEach()for 循环对我来说看起来更自然。

关于javascript - Array.prototype.map() 和 Array.prototype.forEach(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29927278/

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