Создание новых объектов путем динамического перечисления ключей других - PullRequest
0 голосов
/ 25 августа 2018

У меня есть массив объектов с именованными ключами следующим образом:

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

Массив создается после DOM и динамически заполняется из бэкэнда, поэтому с самого начала это просто пустой массив.

Имея все это, я хочу создать новый объект, в котором ключи будут town, а их значения будут массивом двух других ключей postal1 и postal2.

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

Как сделать это наиболее эффективным способом?

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Попробуйте:

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];
0 голосов
/ 25 августа 2018

Вы можете использовать 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);
...