最近在面试过程中,被面试官的这个问题问到,当时第一反应是使用双重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内容如下:
取最后一个数据即可!