【问题标题】:Lodash: _filter Collection with another CollectionLodash:_filter 集合与另一个集合
【发布时间】:2018-08-06 09:53:04
【问题描述】:

快速问题:我有两个集合,我想仅在集合 B 的 id 在集合 A 中可用且其

时过滤集合 B

集合 A:

{
  Hz6NkEhA7HeQbYv1D9cF1nJW9qg1: true,
  IpU5WL7NcCcPP54Y20awU0SgdGu2: true,
  L1TOEwgwtbMjVBWMvbrZDvQprO72: true,
  PzoRPT0YPxMP6xCBxioGk2bigzN2: false,
  Q45P0PgObWPsbm0TwrUjwUAd5rT2: false
}

集合 B:

{
  0: {
    id: 'Hz6NkEhA7HeQbYv1D9cF1nJW9qg1'
  },
  1: {
    id: 'Q45P0PgObWPsbm0TwrUjwUAd5rT2'
  },
  2: {
    id: 'Q45P0PgObWPsbm0TwrUjwUAd5rT2'
  }
}

如何使用 lodash 过滤这两个数组? 我被那些不同的对象、数组等困住了……

非常感谢您的帮助!

【问题讨论】:

  • 这里有问题吗?因为它看起来像一个工作任务。
  • 对不起托马拉克。我编辑了我的答案,并想利用 lodash 来使用 _filter。
  • "...这两个数组":它们不是数组(您也可以自己处理并处理更多合乎逻辑的位置以正确进行换行和缩进)。要回答您的问题“我如何使用 lodash 进行过滤”:通过尝试,通过阅读文档,查找类似的问题和答案,再试一次,......如果你卡住了 在这样做的同时,回来问一个具体的问题。

标签: javascript angular lodash


【解决方案1】:

你的集合不是数组(它们是对象),所以 lodash _.pickBy 方法可能更适合这个。对于_.pickBy,您将要从中选择的对象作为第一个参数,然后将您的过滤器函数作为第二个参数。该过滤器函数将使用两个参数调用:集合中项目的键和值。

因此,对于您想要的,您可以确保 id 存在于第一个集合中并且其值为 true(在 colC 中演示),或者选择 id 存在于第一个集合中的项目 完全,无论价值如何(在colD 中展示)。希望这两个中的一个会是您想要的。

const colA = {
  Hz6NkEhA7HeQbYv1D9cF1nJW9qg1: true,
  IpU5WL7NcCcPP54Y20awU0SgdGu2: true,
  L1TOEwgwtbMjVBWMvbrZDvQprO72: true,
  PzoRPT0YPxMP6xCBxioGk2bigzN2: false,
  Q45P0PgObWPsbm0TwrUjwUAd5rT2: false,
  Hz6NkEhA7HeQbYv1D9cF1nJW9qg1: true,
}

const colB = {
  0: {
    id: 'Hz6NkEhA7HeQbYv1D9cF1nJW9qg1'
  },
  1: {
    id: 'Q45P0PgObWPsbm0TwrUjwUAd5rT2'
  },
  2: {
    id: 'Q45P0PgObWPsbm0TwrUjwUAd5rT2'
  }
}

const colC = _.pickBy(colB, val => colA[val.id])
console.log(colC)

const colD = _.pickBy(colB, val => val.id in colA);
console.log(colD)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.js"></script>

【讨论】:

    猜你喜欢
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    相关资源
    最近更新 更多