从数组创建一个对象

时间:2018-03-12 11:15:23

标签: javascript arrays node.js mapping

我试图将数组转换为地图, 该数组看起来像:

var array = [{
  "id" : 123
}, {
  "id" : 456
}, {
  "id" : 789
}];

我尝试构建的最终对象应该如下所示:

var result = {
  "123": { id: 123 } , 
  "456": { id: 456 } , 
  "789": { id: 789 }
};

任何有效的实施方式都将受到赞赏:)

谢谢

2 个答案:

答案 0 :(得分:3)

var array = [
{"id" : 123, 
"otherProp":"true"
} , 
{"id" : 456, 
"otherProp":"false"
} , 
{"id" : 789, 
"otherProp":"true"
}];
var result = array.reduce(function (acc, cur, i) {
        acc[cur.id] = cur;
        return acc;
}, {});
console.log(result);

使用javaScript reduce

  

reduce()方法对累加器和数组中的每个元素(从左到右)应用函数以将其减少为单个值。

答案 1 :(得分:2)

使用reduce



var array = [{
  "id" : 123
}, {
  "id" : 456
}, {
  "id" : 789
}];

var expectedValue = {
  "123": { id: 123 } , 
  "456": { id: 456 } , 
  "789": { id: 789 }
};

var result = array.reduce( (acc, c) => (acc[ c.id ] = c, acc) ,{});

console.log('result : ', result);
console.log('(JSON.stringify(expectedValue) === JSON.stringify(result)) ? ', (JSON.stringify(expectedValue) === JSON.stringify(result)));

.as-console-wrapper { max-height: 100%!important; top: 0; }




<强>解释

  • 使用reduce进行迭代并初始化累加器{}
  • 将密钥设置为每次迭代id项的c,并将值设置为c本身。