繁体   English   中英

使用第二个数组计算数组中的唯一值

[英]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 }

所需 Output

但我想在我的最终 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM