как я могу сгруппировать массив значений внутри объекта в другой массив объекта - PullRequest
0 голосов
/ 08 марта 2019

У меня есть объект с массивом значений


{firstName: ['John', 'Mike']}, lastName: ['Doe', 'Smith']},


Теперь у меня есть пустой объект с массивом


const newData = {} newData.ppl = []


как мне получить этот результат в массиве ppl, например: ppl = [{firstName: 'John', lastName: 'Doe'}, {firstName: 'Mike', lastName: 'Smith'}]

Ответы [ 5 ]

1 голос
/ 08 марта 2019

Быстрое внедрение с Object.entries, reduce и forEach:

const srcData = {
  firstName: ['John', 'Mike'],
  lastName: ['Doe', 'Smith']
};

const ppl = Object
  .entries(srcData)
  .reduce((acc, [key, values]) => {
    values.forEach((val, i) => {
      if (i >= acc.length) {
        acc.push({});
      }
      acc[i][key] = val;
    });
    return acc;
  }, []);

console.log(ppl);

Объяснение:

  1. Используйте Object.entries, чтобы превратить объект в массив пар ключ-значение.
  2. Используйте .reduce для итеративного построения массива результатов.
  3. Используйте .forEach для циклического перебора массива значений, полученных из (1), помещая пустой объект в массив (push({})), если результатМассив недостаточно длинный для хранения всех элементов в текущем массиве значений
1 голос
/ 08 марта 2019

Итерируйте firstName с Array.forEach() и примите имя. Используйте индекс, чтобы взять соответствующую фамилию из массива lastName. Вставьте новый объект с именем и фамилией в массив ppl.

const data = {firstName: ['John', 'Mike'], lastName: ['Doe', 'Smith']};

const newData = { ppl: [] };

data.firstName.forEach((firstName, i) => 
  newData.ppl.push({ 
    firstName, 
    lastName: data.lastName[i] 
  })
);

console.log(newData);
0 голосов
/ 08 марта 2019

Вы можете сделать это с Array.reduce(), Object.values() и Object.entries() следующим образом:

const data = { firstName: ['John', 'Mike'], lastName: ['Doe', 'Smith'] };

const ppl = Object.entries(data).reduce((acc, [key, arr]) => {
  arr.forEach((v, i) => (acc[i] = (acc[i] || {}))[key] = v);
  return acc;
}, {});

const newData = { ppl: Object.values(ppl) };

console.log(newData);
0 голосов
/ 08 марта 2019

с использованием карты.

let master = {firstName: ['John', 'Mike'], lastName: ['Doe', 'Smith']}

const newData = {};
newData.ppl = master.firstName.map((f,i) => {
  return {firstName: f, lastName: master.lastName[i]};
});

console.log(newData.ppl);
0 голосов
/ 08 марта 2019

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

Это работает для любого произвольного количества свойств.

var data = { firstName: ['John', 'Mike'], lastName: ['Doe', 'Smith'] },
    result = Object
        .entries(data)
        .reduce((r, [k, a]) => (a.forEach((v, i) => (r[i] = r[i] || {})[k] = v), r), []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...