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

Creating new objects by dynamically enumerating keys of others

我有一个对象数组,其命名键如下:

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

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

拥有所有这些我想创建一个新对象,其中 keys 将是 town 并且它们的 values 将是一个另外两个键 postal1postal2.

的数组
Object {
  'London': [111,222],
  'town...': [rand,rand],
}

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

您可以使用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);

试试这个:

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