Извлечение из массива объектов некоторых свойств - PullRequest
0 голосов
/ 08 июня 2018

Как извлечь из массива объектов некоторые свойства, например, без цикла for, с картой или фильтром?

Пример:

obj = [
 { 'cars' : 15, 'boats' : 1, 'smt' : 0 },
 { 'cars' : 25, 'boats' : 11, 'smt' : 0 }
]

extractFunction(obj, ['cars' , 'boats']) -> { 'cars' : [15,25], 'boats' : [1,11]}

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Вы можете использовать динамический подход, используя клавиши для сопоставления значений.

function extractFunction(array, keys) {
    return array.reduce(
        (r, o) => (keys.forEach(k => r[k].push(o[k])), r),
        Object.assign(...keys.map(k => ({ [k]: [] })))
    );
}

console.log(extractFunction([{ cars: 15, boats: 1, smt: 0 }, { cars: 25, boats: 11, smt: 0 }], ['cars', 'boats']));
0 голосов
/ 08 июня 2018

Вы можете сделать это с помощью уменьшить :

* Как видите, преимущество этого подхода (согласно другим ответам) состоит в том, что вы зацикливаете keys только один раз.

const extractFunction = (items, keys) => {
  return items.reduce((a, value) => {
    keys.forEach(key => {
      // Before pushing items to the key, make sure the key exist
      if (! a[key]) a[key] = []
      
      a[key].push(value[key])
    })
    
    return a
  }, {} )
}

obj = [
 { 'cars' : 15, 'boats' : 1, 'smt' : 0 },
 { 'cars' : 25, 'boats' : 11, 'smt' : 0 }
]

console.log(extractFunction(obj, ['cars', 'boats']))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...