【问题标题】:How to combine countBy and filter in lodash如何在 lodash 中结合 countBy 和 filter
【发布时间】:2021-02-19 12:31:25
【问题描述】:

我有以下数据数组:

const data = [
  { year: 1900, title: 'test 1' },
  { year: 2000, title: 'test 2' },
  { year: 2000, title: 'test 3' },
  { year: 2000, title: 'test 4' },
];

我的目标是获得一个年份数组,其中每个给定年份出现两次以上:

[2000]

countBy 很容易通过以下方式实现:

_.chain(data)
.countBy('year')
.value()

返回以下对象:

{'1900': 1, '2000': 3}

我偶然发现了过滤部分。我尝试了以下方法,但它返回了一个空数组:

_.chain(data)
  .countBy('year')
  .filter((o) => {
    o > 2;
  })
  .value();

正确的方法是什么?

【问题讨论】:

  • 我删除了我的答案。但是作为注释,当前代码中的一个问题是过滤谓词缺少返回,因此它总是返回“未定义”,因此列表为空。

标签: javascript arrays lodash


【解决方案1】:

_.filter() 替换为_.pick(),因为过滤器只会返回值([3]),而不是键(年份)。您还应该从回调中返回 - o => o > 2。 然后,获取键(年份)的数组,并将它们映射到数字(如果需要)。

const data = [{"year":1900,"title":"test 1"},{"year":2000,"title":"test 2"},{"year":2000,"title":"test 3"},{"year":2000,"title":"test 4"}];

const result = _(data)
  .countBy('year')
  .pickBy(o => o > 2)
  .keys()
  .map(Number) // <- if you want the years as numbers
  .value();
  
console.log(result);
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"&gt;&lt;/script&gt;

【讨论】:

    【解决方案2】:

    const data = [
      { year: 1900, title: 'test 1' },
      { year: 2000, title: 'test 2' },
      { year: 2000, title: 'test 3' },
      { year: 2000, title: 'test 4' },
    ];
    
    const yearTitlesMap = _.groupBy(data, 'year');
    const yearsAppearingMoreThanTwice = _.filter(_.keys(yearTitlesMap), year => yearTitlesMap[year].length>2);
    
    console.log(yearsAppearingMoreThanTwice);
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"&gt;&lt;/script&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-26
      • 2017-12-30
      • 1970-01-01
      • 2017-02-16
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多