微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有一个数组(下面的例子数组) –
a = [{"name":"age","value":31},{"name":"height (inches)","value":62},{"name":"location","value":"Boston,MA"},{"name":"gender","value":"male"}];

我想迭代这个数组的对象并产生一个新的Object(不是特别的减少).

我有这两种方法

a = [{"name":"age","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循环将会看起来对我来说更自然

原文地址:https://www.jb51.cc/js/152258.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐