通过动态枚举其他对象的键来创建新对象

时间:2018-08-25 10:51:37

标签: javascript arrays for-in-loop

我有一个带有命名键的对象数组,如下所示:

Array [
        {
          'postal1': 111, // number
          'postal2': 222, // number
          'town': 'London', // string
        },
        {},{},... // Objects with same properties
      ]

该数组是在DOM之后创建的,并从后端动态填充,因此从一开始它就是一个空数组。

具有所有这些,我想创建一个新对象,其中将为town,而它们的 values 将是另外两个键{{1 }}和postal1

postal2

如何以最有效的方式做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以使用Array.reduce()从数组生成对象:

const data = [{
  'postal1': 111, // number
  'postal2': 222, // number
  'town': 'London', // string
}];

const result = data
  .reduce((r, { town, postal1, postal2 }) => {
    r[town] = [postal1, postal2];
    
    return r;
  }, {});
  
console.log(result);

答案 1 :(得分:1)

尝试一下:

var A= [
    {
      'postal1': 1110, // number
      'postal2': 2220, // number
      'town': 'A', // string
    },
    {
      'postal1': 1111, // number
      'postal2': 2221, // number
      'town': 'B', // string
    },
   {
      'postal1': 1112, // number
      'postal2': 2222, // number
      'town': 'C', // string
    }
  ];

  var desiredResult={};
  A.forEach(function(a){
     desiredResult[a.town]=[a.postal1, a.postal2];
  });

  console.log(desiredResult);

但是这比all快:

var i=0,
    result={}; 
for(; i<A.length; i++) result[A[i].town]=[A[i].postal1, A[i].postal2];