从数组数组中获取计数

col*_*256 6 javascript arrays ecmascript-6

我下面有一个数组数组。使用ES6,如何获取每个值的计数GoodExcellent并以动态方式将其计数Wow到新数组[{name: Good, count: 4} {name: Excellent, count: 5}, {name:Wow, count:2}]中。我正在尝试使用,Object.assign但是我无法“唯一”地计算出密钥的数量,而我正试图在前端渲染它,因此我需要使用一个数组。我需要使用reduce吗?怎么样?

let k = 0
const stats = {}
const remarks = [
  [{name: "Good"}],
  [{name: "Good"}, {name: "Excellent"}],
  [{name: "Good"}, {name: "Excellent"}, {name: "Wow"}],
  [{name: "Good"}, {name: "Excellent"}, {name: "Wow"}],
  [{name: "Excellent"}],
  [{name: "Excellent"}]
]

remarks.forEach((arr) => {
  arr.map((e) => {
    Object.assign(stats, { [e.name]: k = k + 1 })
  })
})

console.log(stats);
Run Code Online (Sandbox Code Playgroud)

输出:

stats: {Good: 8, Excellent: 11, Wow: 9}

这是不正确的,再加上我需要使用数组。

预期产量:

[{name: Good, count: 4} {name: Excellent, count: 5}, {name:Wow, count:2}]

Tak*_*aki 6

展平数组的数组并从像这样的对象开始减少它: { Good: 0, Excellent: 0, Wow: 0}

然后.mapObject.entries结果转换为数组:

const remarks = [
  [{ name: "Good" }],
  [{ name: "Good" }, { name: "Excellent" }],
  [{ name: "Good" }, { name: "Excellent" }, { name: "Wow" }],
  [{ name: "Good" }, { name: "Excellent" }, { name: "Wow" }],
  [{ name: "Excellent" }],
  [{ name: "Excellent" }]
];

const result = Object.entries(
  remarks.flat().reduce(
    (all, { name }) => {
      all[name] += 1;
      return all;
    },
    { Good: 0, Excellent: 0, Wow: 0 }
  )
).map(([name, count]) => ({ name, count }));

console.log(result);
Run Code Online (Sandbox Code Playgroud)

  • 您只是缺少类型def (2认同)