[英]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"))
我假設您需要map
和filter
。 像這樣的東西:
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
情況下,使用forEach
和filter
構建新的項目數組。
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));
使用find
和splice
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.