@SergOdinokiy

Как сравнить массив с объектом?

Как сравнить массив с объектом и на выходе получить следующие:
const arr=[1,2,3,4];
const obj=[{id:3},{id:5}{id:6}]
//из arr удалено 1,2,4 и добавлено 5,6

Важно не получить новый массив с arr. А сами числа что удалять что добавить.
  • Вопрос задан
  • 379 просмотров
Решения вопроса 3
@ovodovod
I am Software Engineer
Если я правильно поняла вопрос, то можно так:

const arr=[1,2,3,4];
const obj=[{id:3},{id:5}, {id:6}]

const getValues = (obj, arr) => obj.reduce((accum, { id }) => {
  if (!arr.includes(id)) {
    accum.push(id);
  }
  return accum;
}, []);

console.log(getValues(obj, arr)); // [5, 6]


Только лучше переменную obj как-то по другому назвать, ведь по идее у нас там массив с объектами :-)
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
const arr = [1,2,3,4];
const obj = [{id:3},{id:5},{id:6}];

const b = obj.map(o => o.id); // получили [3, 5, 6]
const i = b.filter(el => !arr.includes(el));
const o = arr.filter(el => !b.includes(el));
console.log(`из arr удалено ${o.join(',')} и добавлено ${i.join(',')}`);
// из arr удалено 1,2,4 и добавлено 5,6


Или более абстрактно:
const diff = (a,b) => ({
  i: b.filter(x => !a.includes(x)), // in
  o: a.filter(x => !b.includes(x)), // out
});

const data = diff(arr, obj.map(el => el.id));
console.log(`из arr удалено ${data.o.join(',')} и добавлено ${data.i.join(',')}`);
Ответ написан
Комментировать
@Karpion
Может, преобразовать их к одному типу (к массиву или к объекту - решайте сами) и потом сравнивать?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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