我已經在這個問題上糾結了一整天,但仍然無法實作這個目標。
我有一個產品,其欄位如下
products :[
{
品牌 :"Ray Band"/span>。
尺寸 :"medium",
價格 :250,
...其他
},
{
品牌 :"Okaley",
尺寸 :"大"。
價格 :500,
...其他
},
{
品牌 :"迪奧",
尺寸 :"自由尺寸"。
價格 :475,
...其他
}
我想通過提供某些欄位來過濾這些產品。我想通過使用下面的一個物件來過濾它們。
const filterFields ={
品牌:["rayband","okaley"] 。
尺寸 :["free size"]
}
我想通過 "品牌""Ray Band "或 "okaley "來過濾產品。此外,它們的尺寸也必須是 "自由尺寸"。我還想通過顯示復選框來動態地添加其他鍵和值。我還希望它們能夠正常作業,而不需要手動檢查是否有其他的東西。 我如何做到這一點呢?我嘗試了很多不同的方法,但到目前為止都沒有成功,因為它包括很多嵌套的forEachs。 請大家幫幫我。我也在使用React.js
。uj5u.com熱心網友回復:
這種方式應該對任何鍵名都能動態地作業
const filtered = products.filter(>product => {
return Object.keys(filterFields)。 reduce((acc, filter) =>/span> {
const filterValues = filterFields[filter] 。
const productValue = product[filter];
//這一行定義了什么是你的匹配。
const found = filterValues.find(fv => fv == productValue);
return acc & & found;
}, true)。)
})
你應該按照你的要求來改變內部查找的內容
uj5u.com熱心網友回復:你好,請試一下。
const list = [
{
品牌。"Ray Band"。
尺寸: "中等",
價格: 250,
},
{
品牌。"Okaley",
尺寸: "大",
價格: 500,
},
{
品牌。"迪奧"。
尺寸: "自由尺寸",
價格: 475,
},
];
const filterFields = {
brand: [],
size: [],
};
list.forEach((l, index) => {
if (!filterFields.brand. find((b) => b == l.brand) {
filterFields.brand.push(l.brand)。
}
if (!filterFields.size. find((s) => s === l.size) {
filterFields.size.push(l.size)。
}
//USING DYNAMIC KEYS; }
let elementKeys = Object.keys(l)。
elementKeys.forEach((k) =>/span> {
if (! filterFields[k]) {
filterFields[k] = [];
}
if (!filterFields[k].find((field) => field ==l[k]) {
filterFields[k].push(l[k])。
}
});
});
console.log("filterFields"/span>, filterFields)。
uj5u.com熱心網友回復:
你可以這樣使用.filter()/code>方法:
products.filter(product => filterFields.brand. includes(product.brand) || filterFields。 size.includes(product.size))
這意味著過濾產品,它的品牌名稱包含在filterField的品牌陣列中,并且對尺寸也是如此
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/333300.html
標籤:
