msa6886
@msa6886

Как из одного массива объектов вычесть другой массив объектов?

Как из одного массива объектов вычесть другой массив объектов?
  • Вопрос задан
  • 5753 просмотра
Решения вопроса 2
rockon404
@rockon404
Frontend Developer
для примитивов:
const arr1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
const arr2 = ['b', 'd', 'f'];

const result = arr1.filter(el => !arr2.includes(el));

// результат ['a', 'c', 'e', 'g']


для объектов по искомому ключу:
const arr1 = [{name: 'Carl', age: 32}, {name: 'Sally', age: 24}];
const arr2 = [{name: 'Carl', age: 32}];

const result = arr1.filter(x => !arr2.some(y => x.name === y.name));

// результат [{name: 'Sally', age: 24}]


полное сравнение объектов:
const compareObjects = (obj1, obj2) => {
    for (let p in obj1){
        if (Object.prototype.hasOwnProperty.call(obj1, p)) {
            if(obj1[p] !== obj2[p]){
                return false;
            }
        }
    }
    for(let p in obj2){
        if (Object.prototype.hasOwnProperty.call(obj2, p)) {
            if (obj1[p] !== obj2[p]) {
                return false;
            }
        }
    }
    return true;
};

const arr1 = [{name: 'Carl', age: 32}, {name: 'Sally', age: 24}];
const arr2 = [{name: 'Carl', age: 32}];

const result = arr1.filter(x => !arr2.some(y => compareObjects(x, y)));

// результат [{name: 'Sally', age: 24}]

пояснение почему Object.prototype.hasOwnProperty.call(obj, p), а не obj.hasOwnProperty(p).
Так же можно использовать differesnce из lodash.
Ответ написан
@Interface
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
29 мар. 2024, в 18:19
20000 руб./за проект
29 мар. 2024, в 18:08
2500 руб./за проект
29 мар. 2024, в 17:51
40000 руб./за проект