javascript - 计算每个数组项的出现次数并将结果作为对象返回

标签 javascript arrays duplicates categorical-data categorization

任何本地替代方案:

const colorArray = ['red', 'green', 'green', 'blue', 'purple', 'red', 'red', 'black'];

到:

Object {
  "red": 3,
  "green": 2,
  "blue": 1,
  "purple": 1,
  "black": 1
}

在javascript中??

const colorArray = ['red', 'green', 'green', 'blue', 'purple', 'red', 'red', 'black'];

function categorizeUnique(array) {
  const distinct_objects = {};
  const length = array.length;
  for(let i=0; i<length; i++) {
    const distinct_objects_keys = Object.keys(distinct_objects);
    const possible_index = distinct_objects_keys.indexOf(array[i]);
    if(possible_index === -1) {
      distinct_objects[array[i]] = 1;
    } else {
      distinct_objects[distinct_objects_keys[possible_index]]++;
    }
  }
  return distinct_objects;
}

const result = categorizeUnique(colorArray);
console.log(result);
这是我尝试完成的,但我想要一个已经内置的原生解决方案。

感谢您的宝贵努力和时间!!

最佳答案

Array.prototype.reduce()似乎与您要查找的内容非常接近:

const src = ['red', 'green', 'green', 'blue', 'purple', 'red', 'red', 'black'],

      result = src.reduce((acc,color) => (acc[color]=(acc[color]||0)+1, acc), {})
      
console.log(result)
.as-console-wrapper{min-height:100%;}

关于javascript - 计算每个数组项的出现次数并将结果作为对象返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63685600/

相关文章:

c++ - 临时 const 数组未绑定(bind)到右值引用

java - 计算数组中所有两位整数的总和

swift - 在 tableView 的单元格选择上打开重复的 viewControllers (swift)

javascript - 自定义 Hook 内的 setState 调用不会更新状态

c++ - 检查字符数组 - 每次都返回相同的答案

javascript - 为什么通过 Ajax jQuery 发送数据失败

java - 如何删除 Hashmap 中重复的键值对? - 不只是复​​制键或值

python - 如何确定嵌套列表中的所有元素是否唯一?

javascript - 在悬停子 <ul> <li> 元素时更改父 <ul><li> 元素的样式

javascript - 在 IE7 中更改类名时背景位置不起作用