Как построить новый список объектов, каждый с новым свойством, учитывая начальный список объектов в ES6 без циклов? - PullRequest
0 голосов
/ 11 октября 2018

Если у меня есть список объектов, например:

const poeple = [
    {name: "Johhny", born:1980, passed:2080},
    {name: "Jenny", born:1990, passed:2093},
    ...{name: "Jan", born:1999, passed:2096}
    ];

Я узнал, как создать новый список, с такими возрастами:

const ages = people.map(person => person.passed - person.born);

И я могудобавьте свойство age для первоначальных людей, например, так:

people.map(person => person["age"] = person.passed - person.born);

Но есть ли (быстрый / эффективный / красноречивый) способ просто создать новый массив, где каждый объект имеет дополнительное свойство, так как я не хочу менять исходный массив?

Я пытался использовать метод массива push, но он просто добавляет объекты по одному с циклом, есть ли другой способ сделать это с меньшим количеством кода?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Вы можете использовать Array.map() и создать новый объект, добавив age к существующему объекту, используя Object.assign():

const people = [{name: "Johhny", born:1980, passed:2080},{name: "Jenny", born:1990, passed:2093},{name: "Jan", born:1999, passed:2096}];

const result = people.map(o => Object.assign({
  age: o.passed - o.born
}, o));

console.log(result);
0 голосов
/ 11 октября 2018

Вы можете использовать map метод с расширенным синтаксисом в объекте.

const people = [{name: "Johhny", born:1980, passed:2080},{name: "Jenny", born:1990, passed:2093},{name: "Jan", born:1999, passed:2096}];
	
const result = people.map(person => ({
  ...person,
  age: person.passed - person.born
}))

console.log(result)
...