[英]Advanced filter object in js
我正在嘗試使用 Object 過濾 Arrays 的 Object 但我不知道我能做什么。 樣本:
{
245: [
{
id: "12",
name: "test",
status: "new"
},
{
id: "15",
name: "test2",
status: "old"
},
{
id: "12",
name: "test2",
status: "old"
}],
2815: [
{
id: "19",
name: "test",
status: "new"
},
{
id: "50",
name: "test2",
status: "old"
},
{
id: "120",
name: "test2",
status: "new"
}]
}
如果 status = "new" 但結構不得更改,則需要過濾器:
{
245: [{
id: "12",
name: "test",
status: "new"
}],
2815: [{
id: "19",
name: "test",
status: "new"
},
{
id: "120",
name: "test2",
status: "new"
}]
}
循環條目並使用過濾值創建一個新的 object
const obj = { 245:[ {id:"12",name:"test",status:"new"},{id:"15",name:"test2",status:"old"},{id:"12",name:"test2",status:"old"}], 2815:[ {id:"19",name:"test",status:"new"},{id:"50",name:"test2",status:"old"},{id:"120",name:"test2",status:"new"}] } console.log(filter(obj, item => item.status === "new")) function filter(obj, pred) { return Object.fromEntries(Object.entries(obj).map(([name, value]) => [name, value.filter(pred)])) }
你可以用filter
做到這一點:
for(let key in obj){
obj[key] = obj[key].filter(el => el.status == "new")
}
您需要在 object 鍵上 map 然后在數組元素上過濾出最終結果
var obj = { 245:[ {id:"12",name:"test",status:"new"},{id:"15",name:"test2",status:"old"},{id:"12",name:"test2",status:"old"}], 2815:[ {id:"19",name:"test",status:"new"},{id:"50",name:"test2",status:"old"},{id:"120",name:"test2",status:"new"}] } var res = Object.entries(obj).reduce((acc, [key, value]) => { acc[key] = value.filter(item => item.status === "new"); return acc; }, {}) console.log(res);
您可以像這樣針對這種特定情況執行此操作:
const myObj = { 245:[ {id:"12",name:"test",status:"new"}, {id:"15",name:"test2",status:"old"}, {id:"12",name:"test2",status:"old"} ], 2815:[ {id:"19",name:"test",status:"new"}, {id:"50",name:"test2",status:"old"}, {id:"120",name:"test2",status:"new"} ] }; const filteredObj = filterMyObj(myObj); console.log(filteredObj); function filterMyObj(myObj){ const myObjCopy = {...myObj}; for (const key in myObjCopy){ const myArrCopy = [...myObjCopy[key]]; myObjCopy[key] = myArrCopy.filter(item => item.status == "new"); } return myObjCopy; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.