У меня есть следующий код, который берет 2 массива объектов в JavaScript и сравнивает их и объединяет содержимое, возвращая все объекты из 1-го массива, а также все объекты из 2-го, которые имеют идентификатор, которого нет в 1-м.
Но для тех элементов, которые поступают из 2-го массива, я хочу изменить его запись в новом массиве, чтобы включить только определенные свойства (например, id & make) и добавить новое свойство-заполнитель (например, type: "car «). Я считаю, что это будет использовать функцию карты, но я не могу заставить ее работать.
var cars1 = [
{id: 1, make: "Ford", model: "F150", year: 2002},
{id: 3, make: "Chevy", model: "Tahoe", year: 2003},
];
var cars2 = [
{id: 2, make: "Kia", model: "Optima", year: 2001},
{id: 4, make: "Nissan", model: "Sentra", year: 1982},
];
const cars1IDs = new Set(cars1.map(({ id }) => id));
const combined = [
...cars1,
...cars2.filter(({ id }) => !cars1IDs.has(id))
.map(cars2 => cars2.id)
];
combined.sort(({ id: aId }, {id: bId }) => aId - bId);
console.log(combined);
Я хочу, чтобы объединенный массив заканчивался следующим содержимым:
var combined = [
{id: 1, make: "Ford", model: "F150", year: 2002},
{id: 2, make: "Kia", type: "car"},
{id: 3, make: "Chevy", model: "Tahoe", year: 2003},
{id: 4, make: "Nissan", type: "car"},
];
Но вместо этого это заканчивается как:
var combined = [
{id: 1, make: "Ford", model: "F150", year: 2002},
{id: 3, make: "Chevy", model: "Tahoe", year: 2003},
2,
4
];