получить индекс совпадающего элемента между двумя массивами объектов в javascript

#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. Как я могу получить индекс совпадающего элемента?

Комментарии:

1. Изменить filter на some

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 , в этом случае лучше.