Chefranov
@Chefranov
Новичок

Как сравнить два массива и найти вхождения?

Есть два массива с объектами
var four = [{
    "n1": 2,
    "n2": 4,
    "n3": 15,
    "n4": 23
},
{
    "n1": 15,
    "n2": 4,
    "n3": 23,
    "n4": 3
},
{
    "n1": 4,
    "n2": 9,
    "n3": 7,
    "n4": 3
}]

var three = [{
    "m1": 2,
    "m2": 6,
    "m3": 9
},
{
    "m1": 15,
    "m2": 4,
    "m3": 23
},
{
    "m1": 1,
    "m2": 3,
    "m3": 2
},
{
    "m1": 9,
    "m2": 4,
    "m3": 3
}]

Необходимо массив three сравнить с массивом four и если есть совпадение трех (не больше, не меньше) значений объекта, то вывести этот объект с 4 значениями.
По примеру выше при сравнении должно вывести:
2,6,9 - нет вхождений
15,4,23 - входит в / 2, 4, 15, 23 / 15, 4, 23, 3 /
1,3,2 - нет вхождений
9,4,3 - входит в / 4,9,7,3 /
  • Вопрос задан
  • 114 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const fourValues = four.map(Object.values);

const result = three.map(n => {
  const values = Object.values(n);
  const intersections = fourValues.filter(m => values.every(v => m.includes(v)));
  return `${values} - ${intersections.length
    ? `входит в / ${intersections.map(m => `${m}`).join(' / ')} /`
    : 'нет вхождений'}`;
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
twobomb
@twobomb
var result = four.filter(v=>three.some(v1=> Object.values(v1).filter(v2=>Object.values(v).includes(v2)).length == 3  ),[]);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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