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))
解决方法
我按照这个顺序故意地列出它们,因为它们中的每一个都可以使用列表中的任何东西重新实现.例如,您可以使用.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 举报,一经查实,本站将立刻删除。