嗨, 我有以下对象数组,希望id返回给我它的对象。我该怎么办?
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
}]
}
];
例如,id 2返回后 { id:2, 主题:“尼奥基”, prezzo:12, qta:0 }
答案 0 :(得分:0)
您可以使用.map()
和.find()
方法来找到所需的对象。
let data = [{
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 }
]}];
let locator = (objId) => [].concat(...data.map(({ prodotti }) => prodotti))
.find(( {id} ) => id === objId);
console.log(locator(2));
您还可以将中间结果存储在另一个数组中,以轻松地对其进行迭代并找到结果对象。
let data = [{
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 }
]}];
let _data = [].concat(...data.map(({ prodotti }) => prodotti));
let locator = (objId) => _data.find(( {id} ) => id === objId);
console.log(locator(2));
答案 1 :(得分:0)
const 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}]}]
const output = prodotto.flatMap(a => a.prodotti).find(p => p.id === 2)
console.log(output)
如果flatMap
不是supported in your browser,请使用concat
和Spread syntax
const 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}]}]
const output = [].concat(...prodotto.map(a => a.prodotti))
.find(p => p.id === 2)
console.log(output)
答案 2 :(得分:0)
function getObjById(id) {
for (var i = 0; i < prodotto.length; i++) {
var obj = prodotto[i];
for (var j = 0; j < obj.prodotti.length; j++) {
var inn = obj.prodotti[j];
if (inn.id === id) return inn;
}
}
}
console.log(getObjById(4));
这是javascript的旧版本,受ECMA5支持。
答案 3 :(得分:0)
一种方法可能是结合使用Array#reduce
方法和Array#find
。这样,您就可以遍历每个prodotto
数组项,并将该数组“缩小”到所需的结果(即prodotti
子数组中的项,其中包含id
匹配2
)。
在每个reduce
迭代期间,以下逻辑使您可以“通过”先前找到的结果,或调用对子数组项的搜索(通过Array#find
方法):< / p>
// 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)