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循环将会看起来对我来说更自然

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...