簡體   English   中英

js中的高級過濾器object

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM