我正在嘗試根據另一個物件陣列過濾一些物件。所以我從 API 獲取資料。這些是例如收據:
[
{
"id": 1,
"name": "test",
"category": {
"id": 1,
"name": "Cookies",
},
},
{
"id": 2,
"name": "test2",
"category": {
"id": 2,
"name": "Candy",
},
}
]
然后我試圖根據另一個類別陣列過濾類別名稱上的物件。我為此創建了一個函式:
function onSelectCategory(category) {
let receiptsList = receipts.filter((a) =>
a.category.includes(category.name)
);
setReceiptsView(receiptsList);
setSelectedCategory(category);
}
const category = [ { "id": 2, "name": "Candy" } ];
onSelectCategory(category);
當我運行這個函式時,我得到一個空的 Array []。我真的無法弄清楚我做錯了什么。
uj5u.com熱心網友回復:
由于引數似乎是一個物件陣列,因此您需要Array#some用于比較:
const receipts = [
{ "id": 1, "name": "test", "category": { "id": 1, "name": "Cookies" } },
{ "id": 2, "name": "test2", "category": { "id": 2, "name": "Candy" } }
];
const categories = [ { "id": 2, "name": "Candy" } ];
const receiptsList = receipts.filter(({ category }) =>
categories.some(({ name }) => name === category.name)
);
console.log(receiptsList);
另一種解決方案使用Set:
const receipts = [
{ "id": 1, "name": "test", "category": { "id": 1, "name": "Cookies" } },
{ "id": 2, "name": "test2", "category": { "id": 2, "name": "Candy" } }
];
const categories = [ { "id": 2, "name": "Candy" } ];
const categorySet = new Set(categories.map(({ name }) => name));
const receiptsList = receipts.filter(({ category }) =>
categorySet.has(category.name)
);
console.log(receiptsList);
uj5u.com熱心網友回復:
假設category(引數)是一個字串,問題是您試圖name從字串中獲取屬性,而您應該將字串與物件進行比較。
嘗試這個:
a.category.name == category;
代替
a.category.includes(category.name)
假設 category 是一個字串,我可能是錯誤的,請通過告訴我們引數category等于什么來澄清。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/433656.html
標籤:javascript 反应 反应式
