JavaScript找到数组最多连续出现的数和出现的个数
思路:
- 创建一个类,在实例化的时候将目标数组传入,
constructor中把传入的数组赋值给this.arr,在类中方便使用。
- 在这个类中有两个方法
count函数:
- 将目标数组转为字符串,用正则匹配出目标元素得到一个数组
- 遍历得到的数组,通过比较元素
length来找出目标在数组中最多连续出现的次数,length最大的就是了。
find函数:
- 将目标数组去重后得到一个新数组(这里是一个小优化,避免值一样的元素重复查找,减少不必要的循环遍历),
- 在遍历新数组过程中调用
count函数得到当前元素出现的次数
- 通过
if条件判断当前元素出现的次数now如果比上一个元素出现次数prev少,直接跳过当前循环,
- 否则将当前元素出现的次数
now赋值给prev(记录上一个元素出现次数的变量),并且将当前元素和它出现的次数记录在obj对象中,当遍历结束后,find函数返回obj对象。
代码:
const testArr = [1, 2, 3, 3, 2, 2, 2, 3, 3, 3, 3, 5, 3, 3, 3]
class MyArray {
constructor(arr) {
this.arr = arr
}
count(c) {
let reg = new RegExp(c + '+', 'g'),
t = this.arr.join('').match(reg),
m = 0
for (let i = 0, j = t.length; i < j; i++) {
m = Math.max(t[i].length, m)
}
return m
}
find() {
let newArr = [...new Set(this.arr)]
let prev = 0
let obj = {}
for (let i = 0; i < newArr.length; i++) {
const item = newArr[i]
let now = this.count(item)
if (now < prev) continue
prev = now
obj.count = now
obj.value = item
}
return obj
}
}
const res = new MyArray(testArr).find()
console.log(res)