Ich denke, Ihre Vorgehensweise ist falsch. Das ist ... zu viel Code. Ich habe ein Objekt gemacht, die auf die Daten zu entsprechen scheint, Sie suchen durch:
var data = [
{
username: "Alice",
userData : [
{
id: 1,
someData: "hello"
},
{
id: 2,
someData: "world"
}
]
},
{
username: "Bob",
userData : [
{
id: 3,
someData: "apple"
},
{
id: 4,
someData: "orange"
}
]
}
];
const findStuff = (data, lookup) => {
return data.find(
item => item.userData.some(
userDataItem => userDataItem.id === lookup.id
)
);
}
const shouldGetAlice = findStuff(data, {id: 1});
const shouldBeAliceAgain = findStuff(data, {id: 2});
const shouldGetBob = findStuff(data, {id: 3});
const shouldBeAnotherBob = findStuff(data, {id: 4});
console.log(shouldGetAlice.username);
console.log(shouldBeAliceAgain.username);
console.log(shouldGetBob.username);
console.log(shouldBeAnotherBob.username);
mit .find()
Beginnen Sie, weil Sie ein einzelnes Element erhalten möchten.
Innerhalb des Rückrufs verwenden Sie .some()
, um die Eigenschaften userData
zu überprüfen, anstatt sie selbst zu durchlaufen.
Und das ist es. Sie müssen nicht jedes Array manuell durchlaufen.
Wenn die beschreibenden Variablennamen entfernt werden, kann die Funktion
const findStuff = (data, x) => {
return data.find(u => u.userData.some(ud => ud.id === x.id));
}
Es kann auch auf eine Zeile geschrieben werden, um
verkürzt werden, aber es scheint weniger klar.
Verwenden Sie ein normales 'for' und geben Sie – tymeJV
zurück Verwenden Sie' .find() '?? – vlaz
Richtig, habe nicht bemerkt, dass du es getan hast. So-o-o, tausche einfach deine '.forEaches 'gegen eine' .map' – vlaz