我有兩個字典陣列,都包含一個 ID 屬性,一個是“id”,另一個是“_id”。
我正在嘗試過濾一個包含所有可用書籍的陣列,并根據用戶擁有的書籍從中獲取資料。
const books = allbooks.filter(({ id }) =>
userBooks.findIndex((book) => book._id === id)
)
這是我現在正在使用的代碼,但它沒有按照我的預期運行。
資料是什么樣的
allbooks [
{
id: 1,
name: 'Book 1'
},
{
id: 2,
name: 'Book 2'
}
]
userBooks [
{
_id: 1
}
]
我應該從第二個陣列的 _ids 創建一個陣列并用它過濾嗎?試圖找到這樣做的最佳實踐方式,我經常使用字典陣列,有時發現這很困難。
uj5u.com熱心網友回復:
你太親密了我的朋友。問題是Array.prototype.findIndex回傳 lambda 函式回傳 true 的第一個索引。匹配書籍的索引是索引 0,它是falsy,這會使您的過濾器忽略它,因為過濾器 lambda 函式的結果是假的。
相反,您可以檢查 findIndex 的結果是否 > -1,因為Array.prototype.findIndex如果未找到該元素,則回傳 -1。
const allbooks = [
{
id: 1,
name: 'Book 1'
},
{
id: 2,
name: 'Book 2'
}
];
const userBooks = [
{
_id: 1
}
];
const books = allbooks.filter(({ id }) =>
userBooks.findIndex((book) => book._id === id) > -1
)
console.log(books);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/342694.html
標籤:javascript 数组 字典 筛选
下一篇:無法參考物件屬性
