[英]Transforming this array into an object with underscore
本质上,我有一个数组,例如:
var q = [ { box: false, name: 'A1', stats: ['average'] },
{ box: false, name: 'A2', stats: ['min', 'max'] } ]
我想把这个数组变成
{ A1: ['average'], A2: ['min', 'max'] }
我尝试使用reduce IE:
_.reduce(q, function(statHash, val) {
return _.extend(statHash, {val.name: val.stats}) }, {})
现在这行不通,因为我无法将val.name引用为对象的键(以及我可能无法正确传递备忘录以进行减少。)
将此类数组转换为该对象的最简单方法是什么?
尝试这个...
var q = [ { box: false, name: 'A1', stats: ['average'] },
{ box: false, name: 'A2', stats: ['min', 'max'] } ]
var testObj = {};
for (var i = 0; i < q.length; i++) {
testObj[q[i].name] = q[i].stats;
}
你的直觉是正确的; reduce
是正确的方法:
var q = [ { box: false, name: 'A1', stats: ['average'] },
{ box: false, name: 'A2', stats: ['min', 'max'] } ];
var result = q.reduce(function(res, obj) {
res[obj.name] = obj.stats;
return res;
}, {});
console.log(result);
// => { A1: ["average"], A2: ["min", "max"] }
请记住, reduce
是所有现代浏览器的标准配置 ,因此除非您坚持支持IE8,否则不需要Underscore.js。 如果必须支持IE8,则在_.reduce(q, function...
相同,除了调用_.reduce(q, function...
而不是q.reduce(function...
解决方案的逻辑非常好,您仅遇到语法问题,因为您不能像这样内联地初始化对象。 (因此出现unexpected token: .
错误)
如果将对象声明移到单独的语句中,则代码无需任何进一步修改即可正确运行:
var q = [ { box: false, name: 'A1', stats: ['average'] },
{ box: false, name: 'A2', stats: ['min', 'max'] } ]
var reduced = _.reduce(q, function(statHash, val) {
var o = {}; o[val.name] = val.stats;
return _.extend(statHash, o);
}, {});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.