#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);