あなたのアプローチは間違っていると思います。それは多くのコードに...です。あなたは、単一のアイテムを取得したいので、
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);
が.find()
でオフに開始します。私はあなたを介して探しているデータに適合するように思われるオブジェクトを作りました。
コールバックでは、.some()
を使用して、userData
のプロパティをループしないで確認します。
これだけです。各アレイを手動でループする必要はありません。わかりやすい変数名が削除される場合
、機能はまた、1行に書き込むことができますが、それはあまり明確思わ
const findStuff = (data, x) => {
return data.find(u => u.userData.some(ud => ud.id === x.id));
}
に短縮することができます。
通常の 'for'を使用してそれを返します。 – tymeJV
' .find() 'を使用しますか? – vlaz
そうだとは思わなかった。 So-o-o、あなたの '.forEach'を' .map'のために入れ替えてください – vlaz