【问题标题】:Javascript reduce, count from second occurenceJavascript减少,从第二次出现开始计数
【发布时间】:2021-06-25 02:02:47
【问题描述】:

我有一个名为 adct 的简单数组,其中只有一个成员“title”,并且我正在使用 reduce 函数进行分组/计数。下面的代码按预期工作,但我实际上只想计算第二次出现的元素,而不是第一次。我认为这很简单,但我不知道该怎么做。帮助将不胜感激。谢谢。

    let result = adct.reduce(function (r, a) {
        r[a.title] = r[a.title] || [];
        r[a.title]++;
        return r;
    }, Object.create(null));

【问题讨论】:

  • 从第二次出现”是什么意思?什么是示例输入,您的函数的预期输出是什么?

标签: javascript count reduce


【解决方案1】:

可能有一个更优雅的方法,但这是我想出的

let result = Object.fromEntries(Object.entries( // wrap the reduce as an array
    adct.reduce(function(r, a) {
      r[a.title] = r[a.title] || [];
      r[a.title]++;
      return r; }, Object.create(null)))
    .filter(e=>e[1]>0)) // filter out the zeroes

const adct=[{title:'fred'}, {title:'fred'}, {title:'fred'}, {title:'wilma'}, {title:'wilma'}, {title:'fred'}];

let result = Object.fromEntries(Object.entries(adct.reduce(function(r, a) {
  r[a.title] = r[a.title] || [];
  r[a.title]++;
  return r;
}, Object.create(null)))
.map(e=>{ e[1]--; return e;})
.filter(e=>e[1]>0))

console.log(result)

/* result:
{
  "fred": 3,
  "wilma": 1
}
*/

【讨论】:

  • 它对我来说足够优雅,而且效果很好。非常感谢!
  • 我更新了我的答案,所以现在你的 for...in 循环将按照你想要的方式工作
  • 确实如此。再次感谢。
猜你喜欢
  • 2018-06-25
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-20
  • 2013-10-14
  • 1970-01-01
  • 2017-11-28
相关资源
最近更新 更多