统计数组中的重复数据的数量

简介: 这篇文章总结了5种统计数组中重复数据数量的方法。方法1和4使用for循环和对象存储计数;方法2和5利用`reduce`函数,其中方法5是最简写形式;方法3是特定场景下的应用,针对特定值计数。所有方法最终都返回一个对象,键为数组元素,值为出现次数。

统计数组中的重复数据的数量

开发项目时,进行 行列合并时需要计算当前某值的出现次数,从而决定合并的行数,在搜集资料以及思考下做出如下总结

1、方法1

  1. 首先定义一个数组和空对象

     const arr = ['a', 'b', 'c', 'a', 'a', 'b', ''];
     let obj = {}
    
  2. 循环数组,把循环的数据定义为属性名,倘若未找到相关属性值,默认传1, 否则在原有的数字上加1

     arr.forEach(item => {
    
     obj[item] = (obj[item] + 1) || 1
    
     })
    
     console.log(obj)
    
  3. 打印obj内容如下
    在这里插入图片描述

2、方法2

  1. 首先定义一个数组

     const arr = ['a', 'b', 'c', 'a', 'a', 'b', ''];
    
  2. 对array.reduce 中的prev 赋值即可
    reduce 的第一个参数得到的是迭代计算后的效果,所以可以使用第一个参数实现简单的数组去重和排序等

     arr.reduce(function(prev, next){ 
    
             prev[next] = (prev[next] + 1) || 1;
    
             console.log( prev) 
    
         },{});
    
  3. 打印prev内容如下:
    在这里插入图片描述

3、方法3

  1. 简写reduce

     let counts = (arr, value) => arr.reduce((a, v) => v === value ? a + 1 : a + 0, 0);
    
     console.log('数组counts中"李"出现的次数是:'+counts(["李","李","设","弟","弟","生","生","李"],"李"));
    
  2. 输出结果为
```
结果:数组counts中"李"出现的次数是:3
```

4、方法4

  1. 不用reduce时:
     var arr = ["李","李","设","弟","弟","生","生","李"]; 
     function getRepeatNum(){ 
         var obj = {}; 
         for(var i= 0, l = arr.length; i< l; i++){ 
             var item = arr[i]; 
             obj[item] = (obj[item] +1 ) || 1; 
         } 
         return obj; 
     }
     console.log(getRepeatNum());
    
  2. 结果:{李: 3, 设: 1, 弟: 2, 生: 2}

    5、方法5

  3. 用reduce时
      var arr = ["李","李","设","弟","弟","生","生","李"]; 
      function getRepeatNum(){ 
          return arr.reduce(function(prev,next){ 
              prev[next] = (prev[next] + 1) || 1; 
              return prev; 
          },{}); 
      } 
      console.log(getRepeatNum());
    
  4. 结果:{李: 3, 设: 1, 弟: 2, 生: 2}
相关文章
|
资源调度 JavaScript
|
JavaScript 前端开发
JavaScript 数字精度丢失问题
【10月更文挑战第24天】解决 JavaScript 数字精度丢失的问题需要综合考虑多种因素,并根据具体情况选择合适的方法。通过合理的处理和预防,可以在一定程度上减少精度误差的影响,确保计算结果的准确性。
uniapp页面之间通信、传参、传值方法(父→传→子,子→传→父);获取被打开页面的数据→传→当前页面;当前页面的数据→传→被打开页面
uniapp页面之间通信、传参、传值方法(父→传→子,子→传→父);获取被打开页面的数据→传→当前页面;当前页面的数据→传→被打开页面
|
机器学习/深度学习 算法 计算机视觉
YOLOv11改进策略【SPPF】| SimSPPF,简化设计,提高计算效率
YOLOv11改进策略【SPPF】| SimSPPF,简化设计,提高计算效率
2506 8
YOLOv11改进策略【SPPF】| SimSPPF,简化设计,提高计算效率
|
JavaScript API 索引
js中的reduce()方法 讲解 和实现
`reduce()` 方法对数组元素依次应用一个回调函数,将结果累计并最终返回单一值。语法为 `reduce(callback(accumulator, currentValue, currentIndex, array), initialValue)`。参数包括累计器(初次为初始值或首元素)、当前元素值、索引及数组自身。此方法需返回值供下一轮迭代使用。常见应用场景包括计算数组总和与平均值、统计元素频率、过滤与转换数组内容及去除重复项等。例如,可通过 `reduce()` 快速计算 `[1, 2, 3, 4, 5]` 的总和或对对象属性值求和。此外,还可自定义实现 `reduce()` 方法
6772 1
echarts圆环图设置legend数据对齐百分比样式使用rich富文本标签和formatter函数
echarts圆环图设置legend数据对齐百分比样式使用rich富文本标签和formatter函数
1826 0
|
JavaScript
成功解决node、node-sass和sass-loader版本冲突问题、不需要降低node版本。如何在vue项目中安装node-sass,以及安装node-sass可能遇到的版本冲突问题
这篇文章介绍了在Vue项目中安装node-sass和sass-loader时遇到的版本冲突问题,并提供了解决这些问题的方法,包括在不降低node版本的情况下成功安装node-sass。
成功解决node、node-sass和sass-loader版本冲突问题、不需要降低node版本。如何在vue项目中安装node-sass,以及安装node-sass可能遇到的版本冲突问题
|
JSON JavaScript 定位技术
Echarts 绘制地图(中国、省市、区县),保姆级教程!
Echarts 绘制地图(中国、省市、区县),保姆级教程!
|
Web App开发 JavaScript 前端开发
正确开启vue3.0调试工具vue-devtools
正确开启vue3.0调试工具vue-devtools
6479 2
|
JavaScript 前端开发
报错:Cannot read properties of undefined (reading ‘$message‘)解决方法
以上就是解决"Cannot read properties of undefined (reading ‘$message‘)"错误的几种方法,希望对你有所帮助。
7055 0