我目前有 2 個陣列。一個是包含多個字串的平面陣列,另一個是嵌套陣列。我試圖回傳我的嵌套陣列,其中只包含與我的第一個陣列中的字串匹配的物件。我目前遇到的是,如果只有一個匹配物件與匹配的物件相反,則回傳我的整個陣列。
JS:
const rootIds = ["18828861", "15786287", "13435676"]
const filtData = [
{
year: "2022",
awards: [
{
list: [
{
rootId: "18828861",
name: "Globe",
},
{
rootId: "15786222",
name: "Golden"
},
],
},
],
},
{
year: "2021",
awards: [
{
list: [
{
rootId: "15786223",
name: "Car",
},
{
rootId: "13435676",
name: "Red",
},
],
},
{
list: [
{
rootId: "15786287",
name: "Black",
},
{
rootId: "1578622",
name: "Blue",
},
],
},
],
},
];
const res = rootIds.map((a) => a);
const findIds = filtData.map(obj => obj.awards.filter(( { list }) => list.find(o => rootIds.includes(o.rootId))));
console.log("filtData====", findIds)
期望的輸出是:
"filtData====", [[{
list: [{
name: "Globe",
rootId: "18828861"
}]
}], [{
list: [{
name: "Red",
rootId: "13435676"
}]
}, {
list: [{
name: "Black",
rootId: "15786287"
}]
}]]
不作業演示的 JsFiddle: https ://jsfiddle.net/hb7ej5sg/
uj5u.com熱心網友回復:
在以下位置找到原因:
const findIds = filtData.map(obj => obj.awards.filter(( { list }) => list.find(o => rootIds.includes(o.rootId))));
由于您使用的是#filteron obj.awardsarray 而不是#map和#findonlist而不是#filter,因此您從obj.awards[].list.
使用以下正確方法可以解決問題:
const findIds = filtData.map(obj =>
obj.awards.map(( { list }) =>
list.filter(o => rootIds.includes(o.rootId))
)
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/451944.html
標籤:javascript 数组 多维数组 筛选
上一篇:用物件修改陣列
