javascript - добавление нового свойства к объектам в массиве - PullRequest
0 голосов
/ 25 декабря 2018

Я получил массив person, содержащий много объектов, которые выглядят так:

const person = [
{ first: 'firstName', last: 'lastName', year: 1439, passed: 1495 },
 ...
]

Я посчитал, сколько лет человек прожил:

const oldest = person.map(x => x.passed - x.year);

Получил новый массив с годамидля каждого человека.

Теперь я хотел бы добавить этот рассчитанный год как новый возраст свойства для каждого объекта персонажа в этом массиве.

Можете ли вы мне помочь?

Ответы [ 4 ]

0 голосов
/ 25 декабря 2018

Поскольку оба массива person и oldest имеют одинаковую длину, вы можете просто выполнить итерацию любого из них, создать новые объекты со свойствами age из элементов обоих массивов с одинаковым индексом и передать их в массив результатов..

const person = [
  { first: 'firstName', last: 'lastName', year: 1439, passed: 1495 }
];

const oldest = person.map(x => x.passed - x.year);

const result = [];
person.forEach(({first, last, year, passed}, i) => result.push({first, last, year, passed, age: oldest[i]}));

console.log(result);

Учитывая функцию zip (которая, к сожалению, еще не является стандартным JavaScript), вы также можете сократить ее до:

zip(person, oldest).map(([{first last, year, passed}, age]) => ({first, last, year, passed, age}));
0 голосов
/ 25 декабря 2018

Вы можете установить свойство напрямую, присвоив ему значение следующим образом

Персона [0] .age = самое старое [0]:

Вы можете выполнить цикл следующим образом.

0 голосов
/ 25 декабря 2018

Вы можете использовать array.forEach , который будет перебирать тот же массив, и вы можете создать новое свойство для того же массива.

Если вы хотите получить новый массив, вы можетеиспользуйте array.map , который создаст новый массив.

Я надеюсь, что это решит проблему.

const person = [
{ first: 'firstName', last: 'lastName', year: 1439, passed: 1489 },
{ first: 'secondName', last: 'lastName', year: 1499, passed: 1590 },

{ first: 'thirdName', last: 'lastName', year: 1539, passed: 1570 },

{ first: 'fourthName', last: 'lastName', year: 1993, passed: 2018 },

]


person.forEach(obj => obj["age"] = obj.passed - obj.year)


console.log("same array with added age property", person)
0 голосов
/ 25 декабря 2018

Вы можете добавить новое свойство

person.forEach(p => p.lifetime = p.passed - p.year);

или отобразить новый массив объектов

persons = person.map(p => ({ ...p, lifetime: p.passed - p.year });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...