数组塌陷问题
需求:把数组中的每一个元素都删掉
思路 通过for循环 和splice()对数组中元素进行删除处理
const arr=['a','b','c']
for (let i=0; i<=arr.length;i++){
arr.splice(i,1)
}
consloe.log(arr)
打印结果是
如上所示 出现的问题 :应该删除了所有的元素可以漏掉了 一个元素‘b’
这个问题就叫做splice()的数组塌陷问题
分析这个问题产生的原因
第一次循环是 i =>0 删除了第0个元素 删除了'a' 剩余元素为['b','c']
第二次循环 i=>1 删除了 第一个元素 删除了'c',剩余元素为'b'
解决方法一
执行体内i--
const arr=['a','b','c']
for (let i=0; i<=arr.length;i++){
arr.splice(i,1)
i--
}
consloe.log(arr)
解决方法二
数组长度-1 且i--
const arr=['a','b','c']
for (let i=arr.length-1; i>=0;i--){
arr.splice(i,1)
}
consloe.log(arr)
数组去重的方法
方法一 双重for循环
const arr=['a','b','c','b','a','b']
for(let i=0;i<arr.length;i++){
for(let j=i+1 ;j<arr.length; j++){
arr.splice(j,1)
j--
}
}
console.log(arr)
统计数组中出现的次数
利用key的唯一性解决
const arr=['a','b','c','b','a','b']
const o={}
for(let i0;i<arr.length;i++){
if(o[arr[i]]){
arr[i]++
}else{
o[arr[i]]=1
}
}
console.log(o)
求最大值的方法
const o ={a:3,b:2,c:1}
let max =0
for(let atter in o){
if(o[atter] > max){
char=atter
max=o[atter]
}
}
console.log(`出现最多的字符是${char},出现了${max}次`)