JS js实现数组去重的方法,字符串同样可以用
一.new Set
set数据类型不允许有重复数据,会自动清除重复数据;
通过合并展开运算符…对set类型转化为数组操作.
var arr=[1,2,3,1,2,3,1,2,3];
var set=new Set(arr);
newArr=[...set];
console.log(newArr);
二.创新数组查询判断加入
创建一个新数组,是一个空数组[]
循环遍历原始数组
将 原始数组的数据 通过 数组.push() 方法 写入到新数组中;
使用 indexOf 在 新数组中 查询要写入的数组数据;
如果 结果是 -1 证明 新数组中没有原始数组的数据;
再触发执行写入操作.
var arr=[1,2,3,1,2,3,1,2,3];
var new1=[];
for(i=0;i<=arr.length-1;i++){
if(new1.indexOf(arr[i])===-1){
new1.push(arr[i]);
}
}
document.write( new1 );
三.原数组前后查询比较删除
遍历数组,分别查询第一次出现该元素的索引下标,以及最后一次出现该元素的索引下标;
比较两个下标大小是否相等,如果相等,说明该元素无重;
如果不等则说明有重复,则去掉后出现的,并且为了防止数组塌陷,对循环变量进行处理;
var arr=[1,2,3,1,2,3,1,2,3];
for(i=0;i<=arr.length-1;i++){
var a=arr.indexOf(arr[i]);
var b=arr.lastIndexOf(arr[i]);
if(a===b){
continue;
}else{
arr.splice(b,1);
i--;
}
}
document.write( arr );
四.双重for循环遍历去重
每次循环 是 当前循环单元 和 之后的所有单元进行比较;
如果 起始单元的数据 和 之后单元的数据 相同 删除 之后单元的数据;
1, 外层循环 从第一个单元 至 倒数第二个单元
2, 内层循环 从 当前循环起始单元的下一个单元 至 最后一个单元
3, 如果 当前循环起始单元存储的数据 和 之后循环单元存储的数据相同
删除 之后循环的单元
var arr = [1, 2, 3, 1, 2, 3, 1, 2, 3];
for (j = 0; j <= arr.length - 1; j++) {
for (i = j + 1; i < arr.length; i++) {
if (arr[j] === arr[i]) {
arr.splice(i, 1);
i--;
}
}
};
console.log(arr);
五.利用对象不能存储重复属性的特点
方法1: 循环遍历对象
1, 创建一个空对象 创建一个空数组
2, 循环遍历数组
将 数组单元的数据 作为 对象的属性 新增对象的单元
存储的数据是任意什么数据都可以
3, 循环遍历对象 将 对象的属性作为数据 存储到空数组中
数组.push()
var arr = [1, 2, 3, 1, 2, 3, 1, 2, 3];
var obj = {};
var arr2=[];
for(i=0;i<arr.length;i++){
obj[arr[i]]=1;
}
for(value in obj){
arr2.push(value*1);//转化为数值类型写入新数组
}
console.log(arr2);
方法二:遍历数组,将其作为键名存入对象中,对对象中键名的进行判断,当其内容不在对象中时,将其存入,并将其存入新数组中.
var arr = [1, 2, 3, 1, 2, 3, 1, 2, 3];
var obj = {};
var arr2=[];
for(i=0;i<arr.length;i++){
if(!(obj[arr[i]])){
//当obj中没有arr[i]时,obj[arr[i]]===undefined;转化为布尔值为false,前面加个非判断符!转为true(即当obj中没有arr[i]时,进行写入新数组的操作)
obj[arr[i]]=1;
arr2.push(arr[i]);
}
}
console.log(arr2);
字符串去重
由于字符串可以直接转为数组,去重后,再转为字符串.所以前几种方法,均可用
转化方法:
var str=`123456123456`;
var arr=str.split('');
//此处为去重方法
var obj = {};
var arr2=[];
for(i=0;i<arr.length;i++){
if(!(obj[arr[i]])){
obj[arr[i]]=1;
arr2.push(arr[i]);
}
}
//以上为去重方法
var newStr=arr2.join();
console.log(newStr);