#javascript
Вопрос:
Я не могу понять, как правильно использовать .фильтр() для поиска объекта в массиве путем поиска значения во вложенном массиве.
У меня есть следующие данные:
const orders = [
{
id: 1,
items: [
{
itemId: "abc",
},
{
itemId: "def",
},
],
},
{
id: 2,
items: [
{
itemId: "jkl",
},
{
itemId: "mno",
},
],
},
{
id: 3,
items: [
{
itemId: "abc",
},
{
itemId: "xyz",
},
],
},
];
У меня есть необходимое itemId: "abc"
, которое мне нужно использовать, чтобы найти все объекты, в которых есть элементы, также имеющие идентификатор «abc», так что результат будет таким:
[
{
id: 1,
items: [
{
itemId: "abc",
},
{
itemId: "def",
},
],
},
{
id: 3,
items: [
{
itemId: "abc",
},
{
itemId: "xyz",
},
],
},
]
До сих пор я пробовал следующее:
orders amp;amp;
orders.filter((order) => {
return order.items.filter((item) => item.itemId === "abc");
});
Но, похоже, это не работает. Что я здесь упускаю?
Комментарии:
1. Вместо этого вам нужна внутренняя функция
oder.items.some
. Использование фильтра внутри всегда приведет к массиву, который сохранит все элементы во внешнем фильтре (так как даже пустой массив является правдивым).
Ответ №1:
Крис Джи опередил меня в комментариях, но он прав, вам нужно использовать order.items.some
в своей внутренней функции:
const orders = [{
id: 1,
items: [{
itemId: "abc",
},
{
itemId: "def",
},
],
},
{
id: 2,
items: [{
itemId: "jkl",
},
{
itemId: "mno",
},
],
},
{
id: 3,
items: [{
itemId: "abc",
},
{
itemId: "xyz",
},
],
},
]
var ans = orders.filter((order) => {
return order.items.some((item) => item.itemId === "abc");
});
console.log(ans)
Ответ №2:
const orders = [{
id: 1,
items: [{
itemId: "abc",
},
{
itemId: "def",
},
],
},
{
id: 2,
items: [{
itemId: "jkl",
},
{
itemId: "mno",
},
],
},
{
id: 3,
items: [{
itemId: "abc",
},
{
itemId: "xyz",
},
],
},
];
const result = orders.filter(order =>
order.items.find(item => item.itemId === 'abc') !== undefined
)
console.log(result);
Комментарии:
1. Спасибо вам за ответ! Я выбрал ответ, который включал в себя .некоторые из них после небольшого исследования.