如何映射数组并生成对象而不是数组?

时间:2017-03-10 09:21:13

标签: javascript arrays object ecmascript-6

我想要这段代码:

var arr = [
    { key: 'foo', val: 'bar' },
    { key: 'hello', val: 'world' }
];

var result = arr.map((i) => ([i.key]: i.val)); //something like this

console.log(result);

返回:

{foo: 'bar', hello: 'world'}

这是否可以在ECMA6中使用?

3 个答案:

答案 0 :(得分:5)

Array#map方法用于生成新数组。要使用Array#reduce方法缩减为单个对象。



var arr = [{
    key: 'foo',
    val: 'bar'
  },
  {
    key: 'hello',
    val: 'world'
  }
];

// define the property and return the object reference
// where define the initial value as an empty object for result
var result = arr.reduce((obj, o) => (obj[o.key] = o.val, obj), {}); 

console.log(result);




答案 1 :(得分:1)

您可以使用forEach方法:



var arr = [
    { key: 'foo', val: 'bar' },
    { key: 'hello', val: 'world' }
];

var obj = {};
arr.forEach(function(item){
  obj[item.key] = item.val;
});

console.log(obj);




答案 2 :(得分:0)

您可以使用Array.prototype.reduce执行此操作:

arr.reduce(function(map, obj) {
    map[obj.key] = obj.val;
    return map;
}, {});