@lexstile

Как из двух массивов объектов сделать один, объединив элементы с одинаковыми id?

Есть два массива:

const ListA = [
    {
        id: 234324, // равен ListB[0].uid
        a: 111,
    },
    {
        id: 123213,
        a: 222,
    },
    {
        id: 4565465, // равен ListB[1].uid
        a: 333,
    },
];

const ListB = [
    {
        uid: 234324, // равен ListA[0].id
        b: 111,
    },
    {
        uid: 4565465, // равен ListA[2].id
        b: 222,
    },
    {
        uid: 33243,
        b: 333,
    },
];

Нужно получить новый массив, если id элемента первого массива совпадает с uid элемента второго, эти элементы следует объединить в один:

const ListAB = [
    {
        id: 234324,
        a: 111,
        b: 111, // добавляем из второго массива с id === uid
    },
    {
        id: 4565465,
        a: 333,
        b: 222, // добавляем из второго массива с id === uid
    },
    {
        id: 123213,
        a: 222,
    },
    {
        id: 33243, // меняем имя свойства uid на id
        b: 333,
    },
];
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const idsA = new Set(ListA.map(n => n.id));
const objB = Object.fromEntries(ListB.map(({ uid, ...n }) => [ uid, (n.id = uid, n) ]));
const ListAB = ListA.map(n => ({ ...n, ...objB[n.id] }));
ListB.forEach(({ uid }) => idsA.has(uid) || ListAB.push(objB[uid]));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
summer Ярославль
от 100 000 до 140 000 ₽