我有这个数组:
[{name: 'email',value: 'a@b.com'}, {name: 'phone',value: '123-123-1234'}]
我需要把它变成这样:
{email: 'a@b.com', phone: '123-123-1234'}
我怎样才能做到这一点?我想我可以做一百万次迭代来完成这项工作,但我认为也许有一种更清洁的方法可以做到这一点。
如果有帮助,我正在使用 Underscore 和 jQuery。
我有这个数组:
[{name: 'email',value: 'a@b.com'}, {name: 'phone',value: '123-123-1234'}]
我需要把它变成这样:
{email: 'a@b.com', phone: '123-123-1234'}
我怎样才能做到这一点?我想我可以做一百万次迭代来完成这项工作,但我认为也许有一种更清洁的方法可以做到这一点。
如果有帮助,我正在使用 Underscore 和 jQuery。
Array.prototype.reduce
对于这种类型的操作非常简洁:
var items = [{name: 'email',value: 'a@b.com'}, {name: 'phone',value: '123-123-1234'}]
var data = items.reduce(function (result, item) {
result[item.name] = item.value;
return result;
}, {});
有几种方法可以完成这项任务。
一种是使用Array.prototype.map
:
var arr = [{name: 'email',value: 'a@b.com'}, {name: 'phone',value: '123-123-1234'}];
var obj = {};
arr.map(function (item) {
var key = item.name;
var value = item.value;
if (!obj[key]) {
obj[key] = value;
}
});
console.log(obj);
如评论和其他答案中所述.reduce()
,.forEach()
或者简单的 for 循环也可以完成工作。
UnderscoreJS 非常棒,你可以使用_.map
. 请看下面的代码:
var existingObject = [{name: 'email',value: 'a@b.com'}, {name: 'phone',value: '123-123-1234'}];
var selectedObject = _.map(existingObject, function(obj) {
var retObj = { };
retObj[obj["name"]] = obj["value"];
return retObj;
});
console.log(selectedObject);