#javascript #arrays
#javascript #массивы
Вопрос:
У меня есть два массива объектов. Я хочу получить индекс совпадающего элемента из массива 2. Как это найти?
Это пример.
Массив 1
selectedProduct: [{id:2, name:"product 1", category:"home"}]
Массив 2
allProducts: [{id:1, name:"product 3", category:"grocery"},
{id:2, name:"product 1", category:"home"},{id:3, name:"product 4",category:"vegetables"}]
Фрагмент кода:
const index = this.allProducts.findIndex(item => this.selectedproduct.filter(entry => entry.id === item.id))
Но он возвращает 0. Как я могу получить индекс совпадающего элемента?
Комментарии:
2. @user7411584 пожалуйста, отметьте ответ как решение, если оно решило проблему, чтобы будущие посетители также могли извлечь из него выгоду.
Ответ №1:
Используйте some
вместо:
let selectedProduct = [
{id:2, name:"product 1", category:"home"}
];
let allProducts = [
{id:1, name:"product 3", category:"grocery"},
{id:2, name:"product 1", category:"home"},
{id:3, name:"product 4",category:"vegetables"}
]
const index = allProducts.findIndex(item => selectedProduct.some(entry => entry.id === item.id));
console.log(index);
Комментарии:
1. Хотя технически это работает, это не цель
find
, которая возвращает первый совпадающий элемент илиundefined
.some
более подходит, поскольку он возвращает логическоеtrue
значение, даже если найденный элемент является ложным.2. @PatrickRoberts спасибо за комментарий. Да
some
, в этом случае лучше.