压扁这个数组的简单方法?

时间:2013-04-04 17:05:45

标签: javascript jquery underscore.js

我有这个数组:

[{name: 'email',value: 'a@b.com'}, {name: 'phone',value: '123-123-1234'}]

我需要把它变成这个:

{email: 'a@b.com', phone: '123-123-1234'}

我该怎么做?我想我可以做一百万个迭代器来完成工作,但我想也许有更简洁的方法来做到这一点。

如果有帮助,我正在使用Underscore和jQuery。

3 个答案:

答案 0 :(得分:3)

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;
}, {});

答案 1 :(得分:1)

有几种方法可以完成这项任务。

一个是使用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循环也可以完成工作。

答案 2 :(得分:0)

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);