Object.assign () и массив объектов - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть такой вложенный массив

const names= [[{name: "John"}, {name: "Mary"}],
           [{name: "Paul"}, {name: "Peter"}]];

Я бы хотел вставить country во вложенный объект

const country = {country :"USA"}

, чтобы вывод был похож на

[{name: "John", country : "USA"}, {etc} ,{etc} ]

Идея кода выглядит примерно так:

const combined = names.map((map)=> 
       Object.assign({}, 
              country, 
              /*something to extract name from nested array names*/),
       {country}
         )

Есть предложения, как я могу распределить объект во вложенном массиве для получения желаемого результата?

Если код можно улучшитьдругими способами, пожалуйста, дайте мне знать, также

Ответы [ 6 ]

0 голосов
/ 20 ноября 2018

Вы можете использовать еще одну map в вашей внешней карте для перебора каждого внутреннего массива объектов:

const names= [[{name: "John"}, {name: "Mary"}], [{name: "Paul"}, {name: "Peter"}]],
res = names.map(arr => arr.map(elem => ({...elem, country: 'USA'})));

console.log(res);
0 голосов
/ 20 ноября 2018

Вы можете дважды сопоставить массив имен, его вложенный массив и страну деструктуры в каждый элемент.

const names = [[{name: "John"}, {name: "Mary"}],
           [{name: "Paul"}, {name: "Peter"}]];
           
const country = {country :"USA"};

const namesWithCountry = names.map(name => name.map(n => ({...n, ...country})));

console.log(namesWithCountry);
0 голосов
/ 20 ноября 2018

Используйте метод Reduce для выравнивания массива вместе с map и object.assign, чтобы добавить значение страны к каждому объекту

const names= [[{name: "John"}, {name: "Mary"}],
           [{name: "Paul"}, {name: "Peter"}]];
const country = {country :"USA"};
const newNames = names.reduce((acc, item) =>{
    acc= acc.concat(item.map(value => Object.assign({}, value, country)));
    return acc;
},[]);
console.log(newNames);
0 голосов
/ 20 ноября 2018

Речь идет об использовании вложенного map во внешнем map:

const names = [
  [{
    name: "John"
  }, {
    name: "Mary"
  }],
  [{
    name: "Paul"
  }, {
    name: "Peter"
  }]
]

const country = { country: 'USA' }

const output = names.map (xs => xs.map (x => ({ ...x, ...country })))

console.log (output)
0 голосов
/ 20 ноября 2018

Вы можете использовать flat() для создания нового массива со всеми конкатенационными элементами, объединенными перед использованием map(), следующим образом:

const names= [[{name: "John"}, {name: "Mary"}],
           [{name: "Paul"}, {name: "Peter"}]];
const country = {country :"USA"}
const combined = names.flat().map(p => Object.assign(p, country));
console.log(combined);
0 голосов
/ 20 ноября 2018

Вы можете объявить новый литерал массива, список country в качестве первого элемента, затем распространить массив names[0] в него, не нужно ни Object.assign, ни .map, если у вас есть толькоодин подмассив:

const names= [[{name: "John"}, {name: "Mary"}],
           [{name: "Paul"}, {name: "Peter"}]];
const country = {country :"USA"};
const newNames = [[country, ...names[0]]];
console.log(newNames);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...