col*_*256 6 javascript arrays ecmascript-6
我下面有一个数组数组。使用ES6,如何获取每个值的计数Good
,Excellent
并以动态方式将其计数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}]
展平数组的数组并从像这样的对象开始减少它: { Good: 0, Excellent: 0, Wow: 0}
然后.map
将Object.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)