javascript - Lodash,找到给定一个 id 数组的每个对象
问题描述
我有什么工作,但我怀疑有一个 lodash 方法可以在没有 _.map() 的情况下做到这一点。
const _ = require('lodash')
const ids = [1, 2]
const objects = [
{
id: 1,
foo: 'bar'
}, {
id: 2,
foo: 'baz'
}, {
id: 3,
foo: 'quux'
}
]
const result = _.map(ids, id => _.find(objects, { id }))
console.log(result)
// => [ { id: 1, foo: 'bar' }, { id: 2, foo: 'baz' } ]
谢谢!
解决方案
您可以使用_.intersectionWith()
从objects
数组中获取项目,它id
等于数组中的一个项目ids
:
const ids = [1, 2]
const objects = [{ id: 1, foo: 'bar' }, { id: 2, foo: 'baz' }, { id: 3, foo: 'quux' }]
const result = _.intersectionWith(objects, ids, (o, id) => o.id === id)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"></script>
另一种选择是将objects
数组转换为{ [id]: obj }
using _.keyBy()
(the id
) 的对象,然后使用 using_.at()
从字典中获取项目_.at()
:
const ids = [1, 2]
const objects = [{ id: 1, foo: 'bar' }, { id: 2, foo: 'baz' }, { id: 3, foo: 'quux' }]
const result = _.at(_.keyBy(objects, 'id'), ids)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"></script>
推荐阅读
- html - 使用 vuex 展开/折叠 vuetify 扩展面板
- c++ - 在结构 T 中存储 T 的数组时出现不完整的类型错误
- java - 为什么我超过了时间限制?
- javascript - 通过生成相同/相似形状(不同类型)的数据结构来模拟不变性
- java - 从 java servlet 以正确的格式将数据插入 mysql 表
- python - 在python中将字符串转换为时区iso格式
- docker-compose - 复制失败:stat /var/lib/docker/tmp/docker-builderXXXXXXXX/java-common/ug-common/src:没有这样的文件或目录
- javascript - 当您将内容复制到剪贴板时,有什么方法可以监听?
- c# - 创建用于加载 Gridview 的自定义类
- sql - 在我的案例中使用 SQL Server 2012 进行查询调整的可能性