Массив объектов JavaScript содержит каждый элемент другого массива

#javascript #arrays #filter #javascript-objects

#javascript #массивы #Фильтр #javascript-объекты

Вопрос:

У меня есть массив объектов (array1). Я хочу отфильтровать каждый элемент, который включает ВСЕ теги ([1, 2, 3) . Таким образом, результатом должен быть идентификатор 1. Но я не могу заставить его работать. Результаты, которые я получаю, — это id 1, 2,4, и я не понимаю, почему именно так это действует.

 let array1 = [
  { id: 1, tags: [1, 2, 3] },
  { id: 2, tags: [2, 3] },
  { id: 3, tags: [0, 3] },
  { id: 4, tags: [1, 3] }
];

let tags = [1, 2, 3];

let includesAll = array1.filter((a1) =>
  a1.tags.every((tag) => tags.includes(tag))
);

console.log(includesAll);
  

Ответ №1:

Вы должны сделать наоборот. Вместо проверки того, что каждое значение в a1.tags также находится в tags , вы захотите убедиться, что каждое значение в tags также находится в a1.tags :

 let includesAll = array1.filter((a1) =>
  tags.every((tag) => a1.tags.includes(tag))
);
  

 let array1 = [
  { id: 1, tags: [1, 2, 3] },
  { id: 2, tags: [2, 3] },
  { id: 3, tags: [0, 3] },
  { id: 4, tags: [1, 3] }
];

let tags = [1, 2, 3];

let includesAll = array1.filter((a1) =>
  tags.every((tag) => a1.tags.includes(tag))
);

console.log(includesAll);