各位朋友大家好,大家点开这篇文章让我感到非常荣幸。这一次给大家分享的是数组去重的小知识点,今天我主要说的是 indexOf 去重方法。
indexOf
首先我们说一下 indexOf 的相关知识点。
数组.indexOf() --- 字符首次出现的位置
// 查找数组或者字符串中是否有某个数值后者某个字母
// 如果有这个内容,返回值是 这个内容的 索引下标
// 如果没有这个数据,返回值是 -1
// 这里执行的是 === 全等比较
当然能够查出字符首次出现的位置,那就应该也会查出最后一个字符出现的位置啦!在这里,我们来扩展一下哦!!!
数组.lastIndexOf() --- 字符最后一次出现的位置
// 数组,字符串都可以使用
// 有符合条件的数据,执行结果是最后一次出现位置的索引下标
// 没有符合条件的数据,执行结果是-1
// 进行的也是 === 全等比较
下面是实例讲解时刻
<script>
var arr = [1,1,1,1,1,'w',2,2,2,2,2,'w','w','w',2,3,'true',3,'true',3,3,3,'true',3,4,4,4,4,5,5,5,5,5]
//建立一个空数组,来存储原始数组中,不重复数据
var nu = [];
// 循环遍历,获取原始数组arr中的所有数值
arr.forEach(function(v){
// 在新数组中,查找当前获取的原始数组的数值
// newArr.indexOf(v) 执行结果如果是 -1
// 证明在新数组中,没有这个原始数组的数据
if(nu.indexOf(v) === -1){
nu.push(v);
}
})
console.log(nu);
</script>
基本思路:
1、建立一个新的数组,将原始数值中的数值,向新的数组中写入
2、如果这个数值不存在于新的数组中,就执行写入,如果已经存在,就不写入
运行结果图:
若是字符串该如何去重???
在这里我们今天还用 indexOf 的方法进行去重
解题思路和上面的基本相同,我们这里就不再多说什么啦!
<script>
var str = 'aaabbbbcccddddeeeeefffff';
// 原理相同,只是字符串不能使用forEach()循环
var newStr = '';
// 通过for...in来循环遍历,字符串
// key存储的是每个字母的索引下标
for(var key in str){
// str[key] 是 当前循环,获取的索引下标,对应的字符串中的字母
// newStr.indexOf(str[key]) 判断 新字符串中,是否有当前这个字母
// 如果结果是 -1 证明新字符串中没有这个字母
if(newStr.indexOf(str[key]) === -1){
// 执行字符串拼接操作,将这个字母拼接入新的字符串中
newStr += str[key];
}
}
console.log(newStr);
</script>
运行结果图:
切记,这里字符串去重不能够用 forEach()循环