分组数组并获取计数

9 javascript node.js

说我有这样的数组:

[
   "foo",
   "bar",
   "foo"
   "bar",
   "bar",
   "bar",
   "zoom"
]
Run Code Online (Sandbox Code Playgroud)

我想对它进行分组,这样我就可以得到这样的计数:

{
  "foo": 2,
  "bar": 4,
  "zoom": 1
}
Run Code Online (Sandbox Code Playgroud)

有没有可以做到这一点的实用程序?

Ele*_*Ele 13

只需使用该功能Array.prototype.reduce

let array = [   "foo",   "bar",   "foo",   "bar",   "bar",   "bar",   "zoom"],
    result = array.reduce((a, c) => (a[c] = (a[c] || 0) + 1, a), Object.create(null));

console.log(result);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)

  • 你还应该提到`逗号运算符`及其工作原理......如果你不解释它或链接到它,很多人不会理解语法。 (3认同)
  • 如果有人像我一样对 `, Object.create(null)` 部分感到困惑,逗号使用 [逗号运算符](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference /Operators/Comma_Operator) 返回空对象。使用“Object.create(null)”而不是“{}”来创建[没有原型的对象](/sf/ask/1086282991/) (3认同)

Moc*_*cca 8

是的,您可以将reduce()数组存储为带有键和计数的对象,如下所示:

const input = [
  "foo",
   "bar",
   "foo",
   "bar",
   "bar",
   "bar",
   "zoom"
];
const result = input.reduce((total, value) => {
     total[value] = (total[value] || 0) + 1;
     return total;
}, {});
console.log(result);
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!