【问题标题】:Filter array of dictionaries with array of dictionaries用字典数组过滤字典数组
【发布时间】:2021-12-15 00:51:35
【问题描述】:

我有两个字典数组,都包含一个 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 创建一个数组并用它过滤吗?试图找到执行此操作的最佳实践方法,我经常使用字典数组,有时觉得很难。

【问题讨论】:

  • 请提供一个有意义的输入数据和预期输出数据示例。您目前对问题的描述不是很清楚。对我来说,目前听起来你更想合并两个数组而不是过滤其中一个..
  • @derpirscher 我在描述中字面意思是说过滤器和使用过滤器。

标签: javascript arrays dictionary filter


【解决方案1】:

你太亲密了,我的朋友。问题是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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多