我有一個物件陣列,我想根據另一個陣列過濾它。如果filters
物件值只有一個,我可以使用 only filter
,但是如果物件中還有一個值filters
,則什么也不顯示。所以forEach
在過濾器內部使用并希望回傳擬合值。你能幫我看看是什么問題嗎?謝謝
預期結果:
[
{
"tags": [
"madewithout__gluten",
"madewithout__nuts",
],
"metafields": "Side"
}
]
const data = [
{
"tags": [
"madewithout__gluten",
"madewithout__nuts",
],
"metafields": "Side"
},
{
"tags": [
"madewithout__gluten",
],
"metafields": "Side"
},
{
"tags": [
"madewithout__nuts"
],
"metafields": "Side"
}
]
const filters = ['gluten', 'nuts']
const result = data.filter((v) => {
filters.forEach((tag) => {
if(!v.tags.includes(`madewithout__${tag}`))
return;
});
});
console.log(result);
uj5u.com熱心網友回復:
根據您提供的資料的語意,您要檢查是否所有filters
內容都包含在tags
:
const result = data.filter((v) =>
filters.every((tag) => v.tags.includes(`madewithout__${tag}`))
)
const data = [
{
"tags": [
"madewithout__gluten",
"madewithout__nuts",
],
"metafields": "Side"
},
{
"tags": [
"madewithout__gluten",
],
"metafields": "Side"
},
{
"tags": [
"madewithout__nuts"
],
"metafields": "Side"
}
]
const filters = ['gluten', 'nuts']
const result = data.filter((v) =>
filters.every((tag) => v.tags.includes(`madewithout__${tag}`))
)
console.log(result);
uj5u.com熱心網友回復:
而不是.forEach
,使用.some
const result = data.filter((v) => {
return !filters.some((tag) => !v.tags.includes(`madewithout__${tag}`))
});
顯示代碼片段
const data = [{
"tags": [
"madewithout__gluten",
"madewithout__nuts",
],
"metafields": "Side"
},
{
"tags": [
"madewithout__gluten",
],
"metafields": "Side"
},
{
"tags": [
"madewithout__nuts"
],
"metafields": "Side"
}
]
const filters = ['gluten', 'nuts']
const result = data.filter((v) => {
return !filters.some((tag) => !v.tags.includes(`madewithout__${tag}`))
});
console.log(result);
您的代碼有問題
Array.forEach
不回傳任何東西。所以你的回報不會打破回圈或回傳值。- 你
Array.filter
沒有return
宣告。因此,默認情況下一切都是假的(回傳未定義),因此是空陣列
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/508380.html
標籤:javascript