简介
去重是一个比较常见的算法,简而言之就是把一个集合中重复的项目去掉只保留不重复的。下面是一个JS最简单的处理。后续2-4没给答案原理差不多,大家试一下吧。
基本算法
遍历目标数组,把目标数组中的元素放入新的数组中,放入前检查是否已经存在,如果已经存在则不再放入。
基础函数
- 数组去重
例如:[1,4,6,7,9,6,4,5]
去重后的结果为:[1,4,6,7,9,5]
代码:
function uniqueArray(arr){
// 存放结果
var res = [];
for(var i in arr){// 遍历数组元素
if(res.indexOf(arr[i]) == -1){// 如果结果数组不存在该元素则保存
res.push(arr[i]);
}
}
// 返回去重后的数组
return res;
}
// 测试
uniqueArray([1,4,6,7,9,6,4,5]);
注意:
indexOf
是ES5新增加函数,用来获取数组中元素的位置(下标),兼容性IE8+
- 字符串去重
例如:"14679645"
去重后的结果为:"146795"
代码:
function uniqueString(str){
// 存放结果
var res = "";
for(var i in str){// 遍历字符串元素
if(res.indexOf(str.charAt(i)) == -1){// 如果结果不存在该元素则保存
res+=str.charAt(i);
}
}
// 返回去重后的字符串
return res;
}
// 测试
uniqueString("14679645");
发现没有,与数字去重长的差不多。
可以把字符串转化成数组,然后去重,再把结果数组转换成字符串。(这里使用了上面那个数组去重的函数uniqueArray
)
// 字符串转换成数组
function uniqueString(str){
// 把字符串转换成数组
var arr = str.slice("");
// 数组去重
var res = uniqueArray(arr);
// 把数组转换成字符串
return res.join("");
}
uniqueString("14679645");
- 数字去重
例如:14679645
去重后的结果为:146795
延续上面的思路就比较简单了,先把数字转换成字符串,再做处理。
代码:
function uniqueNumber(num){
// 把数字转换成字符串
var str = num + "";
// 字符串去重
var res = uniqueString(str);
// 把字符串转换成数字
return parseInt(res);
}
// 测试
uniqueNumber(14679645);
- 对象数组去重
例如:
[
{
name:"张三",
age:18
},
{
name:"李四",
age:17
},
{
name:"张三",
age:18
},
{
name:"王五",
age:18
}
]
去重后的结果为:
[
{
name:"张三",
age:18
},
{
name:"李四",
age:17
},
{
name:"王五",
age:18
}
]
代码:略