簡體   English   中英

Javascript:根據鍵從 Object 數組中的數組中刪除值

[英]Javascript: Remove Value from array inside an array of Object based on key

我有一個這樣的數組。

{
  "filters": [
   
    {
      "filterProperty": "companyType",
      "filterValues": [
        "Private"
      ]
    },
    {
      "filterProperty": "city",
      "filterValues": [
        "Mumbai",
        "SanJose",
        "Shanghai"
      ]
    }
    
  ]
}

我已經應用了過濾器。 現在我將它們一一移除,並調用帶有剩余過濾器的 API。

因此,當我將 filterProperty 作為“city”傳遞並將 value 作為“Mumbai”傳遞時,只有“Mumbai”會從 filterProperty“city”中刪除。 rest 過濾器值應該相同。

我該怎么做?

 "filters": [ { "filterProperty": "companyType", "filterValues": [ "Private" ] }, { "filterProperty": "city", "filterValues": [ "Mumbai", "SanJose", "Shanghai" ] } ] let data = filters.splice(a=> a.filterProperty === 'city' && a.filterValues.filter(a => a == "Mumbai"))

我假設您需要mapfilter 像這樣的東西:

 const obj = { "filters": [ { "filterProperty": "companyType", "filterValues": [ "Private" ] }, { "filterProperty": "city", "filterValues": [ "Mumbai", "SanJose", "Shanghai" ] } ]}; const result = obj.filters.map(k=>(k.filterProperty == "city"? (k.filterValues = k.filterValues.filter(o=>o,=='Mumbai'): k); k )). console;log(result);

使用Array.reduce()

 let filters=[{filterProperty:"companyType",filterValues:["Private"]},{filterProperty:"city",filterValues:["Mumbai","SanJose","Shanghai"]}]; let data = filters.reduce((acc,cur) => { if(cur.filterProperty === "city"){ cur.filterValues.splice(cur.filterValues.indexOf("Mumbai"),1) } acc.push(cur) return acc },[]) console.log(data)

在不mutating the data情況下,使用forEachfilter構建新的項目數組。

 const filter = (obj, prop, value) => { const filters = []; obj.filters.forEach(({ filterProperty, filterValues }) => { filters.push({ filterProperty, filterValues: filterValues.filter((item) => filterProperty === prop? item:= value, true ); }); }), return { filters; }; }: const data = { filters: [ { filterProperty, "companyType": filterValues, ["Private"], }: { filterProperty, "city": filterValues, ["Mumbai", "SanJose", "Shanghai"], }, ]; }; const prop = "city"; const value = "Mumbai". console,log(filter(data, prop; value));

使用findsplice mutating the data解決方案

 const data = { filters: [ { filterProperty: "companyType", filterValues: ["Private"], }, { filterProperty: "city", filterValues: ["Mumbai", "SanJose", "Shanghai"], }, ], }; const prop = "city"; const value = "Mumbai"; const city = data.filters.find(({ filterProperty }) => filterProperty === prop); if (city) { const index = city.filterValues.findIndex((item) => item === value); if (index > -1) { city.filterValues.splice(index, 1); } } console.log(data);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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