首页 > 解决方案 > 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' } ]

谢谢!

标签: javascriptlodash

解决方案


您可以使用_.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>


推荐阅读