Проверьте, включен ли объект из одного массива в другой массив объектов - PullRequest
0 голосов
/ 20 апреля 2020

У нас есть 2 массива

const arr1 = [{color: 'red', shape: 'square'}, {color: 'blue', shape: 'circle'}, {color: 'green', shape: 'square}]
const arr2 = [{color: 'red', shape: 'circle'}, {color: 'blue', shape: 'circle'}]

Я хочу проверить, включен ли хотя бы один элемент из arr2 в arr1 (если да, вернуть значение bool). Пока я пробовал arr2.some(item => arr1.includes(item)), но, похоже, это не сработало.

Ответы [ 4 ]

1 голос
/ 20 апреля 2020

Вы можете использовать этот код arr2.some (item => arr1.find (e => JSON .stringify (e) === JSON .stringify (item))

0 голосов
/ 20 апреля 2020

Массив includes() соответствует объекту, используя равенство ссылок, он не сравнивает свойства объекта. Итак, вам также нужен объект соответствия.

const overlap = arr1.some(i1 => arr2.some(i2 => matchObj(i1,i2)));

, и вам придется написать реализацию matchObj(obj1, obj2).

Вы также можете использовать loda sh 's isEqual() или intersecttionWith() метод:

const arr1 = [{color: 'red', shape: 'square'}, {color: 'blue', shape: 'circle'}, {color: 'green', shape: 'square'}];
const arr2 = [{color: 'red', shape: 'circle'}, {color: 'blue', shape: 'circle'}];

// check for overlap
const hasCommon = _.some(arr1, i1 => _.some(arr2, i2 => _.isEqual(i1, i2)));
console.log('hasCommon:', hasCommon);

// get common items
const commonItems = _.intersectionWith(arr1, arr2, _.isEqual);
console.log('commonItems:', commonItems);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
0 голосов
/ 20 апреля 2020

Если ваш массив объектов маленький, не слишком большой. Вы можете использовать JSON .stringify тоже.

const arr1_str = JSON.stringify(arr1);
arr2.some(item2 => arr1_str.includes(JSON.stringify(item2)));

const arr1 = [{color: 'red', shape: 'square'}, {color: 'blue', shape: 'circle'}, {color: 'green', shape: 'square'}];
const arr2 = [{color: 'red', shape: 'circle'}, {color: 'blue', shape: 'circle'}];

const arr1_str = JSON.stringify(arr1);
console.log(arr2.some(item2 => arr1_str.includes(JSON.stringify(item2))));
0 голосов
/ 20 апреля 2020

Array.prototype.include проверяет, равно ли оно, поэтому полезно для примитивных значений. Чтобы проверить, равно ли оно (для массивов и объектов), вы можете использовать метод find. Поэтому правильное решение будет:

arr2.some(item => arr1.find(e=>e.color==item.color&&e.shape==item.shape))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...