#javascript #arrays
#javascript #массивы
Вопрос:
customerProducts: [
{
name: "foo",
id: 123
},
{
name: "test",
id: 44
}
]
otherProducts: [
{
name: "other",
id: 44
},
{
name: "test",
id: 21
}
]
Я хочу выполнить итерацию customerProducts
, которая представляет собой массив объектов. Я хочу отфильтровать те customerProducts
, у которых есть идентификатор, который есть у другого массива объектов, otherProducts
, . Так, например, я бы хотел, чтобы возвращаемый результат в этом случае был:
{
name: "test",
id: 44
}
поскольку otherProducts
имеет id
значение 44.
Я думал о том, чтобы отобразить otherProducts
и просто вернуть массив идентификаторов, а затем запустить a forEach
для этого, но это кажется долгим способом сделать это.
Комментарии:
1. Создайте массив всех идентификаторов
otherProducts
. Затем фильтруйтеcustomerProducts
с помощью функции обратного вызова, которая используетotherIds.includes(product.id)
Ответ №1:
Создайте список Set
значений для фильтрации по ( id
из otherProducts
) , а затем выполните фильтрацию customerProducts
по этому набору
const customerProducts = [{name: "foo",id: 123},{name: "test",id: 44}]
const otherProducts = [{name: "other",id: 44},{name: "test",id: 21}]
const otherProductIds = new Set(otherProducts.map(({ id }) => id))
const filteredCustomerProducts = customerProducts.filter(({ id }) =>
otherProductIds.has(id))
console.info(filteredCustomerProducts)
Ответ №2:
Это можно сделать с помощью методов массива filter и некоторых других.
customerProducts.filter((x)=> otherProducts.some(y=> y.id === x.id));
Объяснение:
метод filter вызовет каждый элемент в otherProducts
массиве и проверит id
customerProduct
, присутствует ли в otherProducts
хотя бы для одного элемента.
Ответ №3:
объявите customerProducts
otherProducts
как переменную массива JS и используйте функции поиска фильтра массива JS
let customerProducts = [
{
name: "foo",
id: 123
},
{
name: "test",
id: 44
}
]
let otherProducts = [
{
name: "other",
id: 44
},
{
name: "test",
id: 21
}
];
let filtered = customerProducts.filter( el => otherProducts.find( e => e.id == el.id) )
console.log(filtered);