Одним из подходов может быть использование метода Array#reduce
в сочетании с Array#find
.Это позволяет вам перебирать каждый элемент массива prodotto
и «сокращать» этот массив до результата, который вы ищете (то есть элемент в подмассиве prodotti
с id
соответствием 2
).
Во время каждой итерации reduce
следующая логика позволяет вам либо «пропустить» ранее найденный результат, либо вызвать поиск элемента подмассива (с помощью метода Array#find
):
// If currentResult defined, return that, otherwise look for a matching item
// in prodotti sub-array which will become the currentResult for subsequent
// iterations:
return currentResult || item.prodotti.find(subitem => {
return subitem.id === 2;
});
Эти две идеи, объединенные в рабочее решение, представлены следующим образом:
var prodotto = [{
categoria: "primi",
prodotti: [{
id: 1,
nome: "pasta",
prezzo: 12,
qta: 0
}, {
id: 2,
nome: "gnocchi",
prezzo: 12,
qta: 0
}]
},
{
categoria: "secondi",
prodotti: [{
id: 3,
nome: "salsiccia",
prezzo: 12,
qta: 0
}, {
id: 4,
nome: "frittura",
prezzo: 12,
qta: 0
}]
}
];
// Use reduce to search all sub arrays of the prodotto array
var result = prodotto.reduce((currentResult, item) => {
// return the current result found, or if none yet return
// the result (if any) that is found in the prodotti sub array
return currentResult || item.prodotti.find(subitem => {
return subitem.id === 2;
});
}, undefined)
console.log(result)