Задать вопрос
@1233211

Как правильно скрестить 3 массива в один?

Есть 3 массива с объектами, у каждого могут быть объекты с одинаковыми id, как объединить все три массива в один так, чтобы остались только объекты с разными id (если в каком-то объекте полей больше, чем в другом с таким же id, просто дописать не хватающие поля) + нужно отсортировать по id (можно использовать, конечно sort((a,b) =>b-a), но на сколько правильно, может можно как-то за один проход сделать)? Спасибо!
  • Вопрос задан
  • 211 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const merge = (key, ...arrs) =>
  Object.values(arrs.flat().reduce((acc, n) => (
    Object.assign(acc[n[key]] ??= {}, n),
    acc
  ), {}));


const result = merge('id', arr1, arr2, arr3);
Ответ написан
Комментировать
@vshvydky
чет типо этого и куча других вариантов, которые тебе прийдут в голову.
const res = [...a, ...b, ...c] // склеили
const logicalFunction = (acc, item)=>{
    if(acc[item.id]){
        // попытка мержа , merge напиши сам 
         acc[item.id] = merge(acc[item.id], item);
    } else {
        acc[item.id] = item;
    }
    return acc;
}
const obj = res.reduce(logicalFunction, {});
const final = Object.values(obj).sort((a,b)=b.id-a.id)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы