[英]using a second array count unique values in array
在 arrays 中有很多关于计算唯一值的帖子,但我想根据第二个数组计算数组中的唯一值。 具体来说:我想计算arr
中的不同出现次数,但要计算grade
中的所有值
arr = [
"12D","12D","12D",
"12C","12C","12C","12C","12C",
"12B","12B","12B","12B","12B",
"12B","12B",
"12A","12A","12A","12A","12A",
"12A","12A","12A","12A","12A",
"12A","12A"
]
grade = ["13B", "13A", "12D", "12C", "12B", "12A"]
result = arr.filter(item => grade.includes(item))
.reduce((acc, val) => {
acc[val] = acc[val] === undefined ? 1 : acc[val] += 1;
return acc;
}, {});
我目前的结果确实计算了独特的出现次数
{ '12D': 3, '12C': 5, '12B': 7, '12A': 12 }
但我想在我的最终 object 中包含所有等级内的值(并且按照grade
的顺序)
desired_result = {
'13B': 0,
'13A': 0,
'12D': 3,
'12C': 5,
'12B': 7,
'12A': 12
}
是否可以使用第二个向量执行此减少?
您可以 map 等级作为条目,并将 object 作为减少的起始值。
const array = ["12D", "12D", "12D", "12C", "12C", "12C", "12C", "12C", "12B", "12B", "12B", "12B", "12B", "12B", "12B", "12A", "12A", "12A", "12A", "12A", "12A", "12A", "12A", "12A", "12A", "12A", "12A"], grade = ["13B", "13A", "12D", "12C", "12B", "12A"], result = array.reduce( (acc, val) => { if (val in acc) acc[val]++; return acc; }, Object.fromEntries(grade.map(g => [g, 0])) ); console.log(result);
.as-console-wrapper { max-height: 100%;important: top; 0; }
另一种方法是从成绩开始并建立一个频率表,如下所示。 然后,您可以在生成的数组对数组上调用Object.fromEntries()
:
const result = Object.fromEntries(
grade.map(grade => [grade, arr.filter(g => g === grade).length])
);
演示
const arr = ["12D","12D","12D","12C","12C","12C","12C","12C","12B","12B","12B","12B","12B","12B","12B","12A","12A","12A","12A","12A","12A","12A","12A","12A","12A","12A","12A"]; const grade = ["13B", "13A", "12D", "12C", "12B", "12A"]; const result = Object.fromEntries( grade.map(grade => [grade, arr.filter(g => g === grade).length]) ); console.log( result );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.