关于计算 数组中重复数据的个数

最近在面试过程中,被面试官的这个问题问到,当时第一反应是使用双重for循环,截取字符串的时候,num++,显然这是一个极其笨拙的方法,当场被面试官指出错误。后来在网站上搜索相关帖子,总结出2个较为简单的办法,希望这次总结能对前端小白有所帮助。

方法一:

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)

打印obj内容如下

这样便可以得到相关数据的重复个数。

方法二:

1. 首先定义一个数组

const arr = ['a', 'b', 'c', 'a', 'a', 'b', ''];

2. 对array.reduce 中的prev 赋值即可

介于大家对reduce实现数据循环较为陌生,这里可以简单解释一下reduce 和普通数据循环有什么差距(forEach,map,filter)。reduce 的第一个参数得到的是迭代计算后的效果,所以可以使用第一个参数实现简单的数组去重和排序等

arr.reduce(function(prev, next){ 

        prev[next] = (prev[next] + 1) || 1;

        console.log( prev) 

    },{}); 

打印prev内容如下:

取最后一个数据即可! 

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值