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

Как добавить новый элемент в объект массива по условию?

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

const test = [
        { title: 'Название 1', id: 4 },
        { title: 'Название 2', id: 2 },
        { title: 'Название 3', id: 3 },
        { title: 'Название 4', id: 1 },
      ];

      const testResult = [
        { id: 1, count: 234 },
        { id: 2, count: 344 },
        { id: 3, count: 5678 },
        { id: 4, count: 3421 },
      ];

В массив testResult нужно добавить новые свойства 'title', id должны соответствовать названию. То есть, по итогу получить массив

const testResult = [
        { id: 1, count: 234, title: 'Название 4' },
        { id: 2, count: 344 , title: 'Название 3'  },
        { id: 3, count: 5678, title: 'Название 2'  },
        { id: 4, count: 3421, title: 'Название 1'  },
      ];
  • Вопрос задан
  • 718 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Собираем новый массив:

function merge(key, ...arrs) {
  const getKey = key instanceof Function ? key : n => n[key];
  const result = new Map;

  arrs.forEach(arr => arr.forEach(n => {
    const k = getKey(n);
    result.set(k, Object.assign(result.get(k) ?? {}, n));
  }));

  return [...result.values()];
}

const result = merge('id', testResult, test);

Обновляем существующий:

function merge(key, target, ...arrs) {
  const getKey = key instanceof Function ? key : n => n[key];
  const targetMap = new Map(target.map(n => [ getKey(n), n ]));

  arrs.forEach(arr => arr.forEach(n => {
    const k = getKey(n);
    targetMap.has(k) && Object.assign(targetMap.get(k), n);
  }));

  return target;
}

merge(n => n.id, testResult, test);
Ответ написан
Комментировать
olegbarabanov
@olegbarabanov
Программист, фрилансер (ИП)
Может этот пример вам поможет? Пример работы можно посмотреть на codepen
const newTestResult = testResult.map(item => ({
  ...item,
  title: test.find(subItem => subItem.id === item.id)?.title,
}));
console.log(newTestResult);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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