JavaScript数组去重
这是一个适合刚刚接触js的同学用来练手学习的一个数组去重的方法,有原生的写法和方法的封装。数组在我们平时工作中还是经常会遇到的所以这个去重还是很有必要牢记的
- 原生写法
<script>
var arr = [1,2,3,4,1,2,3,100,200,100,1,1,2,2,100,200,300,400];
var obj = {};
for (var i = 0; i <arr.length; i++) {
//cur当前数组中的每一项
var cur = arr[i];
//条件不成立的话代表对象中没有存储这一项 成立已经存过了
if (obj[cur] == cur){ //这一项是重复的 删除掉
//将数组中最后一项那一份一摸一样的放到当前项 并且把最后一项删除
arr[i] = arr[arr.length-1];
arr.length--;
i--;
continue; //跳出当前循环进入到下一轮循环
}
//{1:1,2:2,3:3,4:4}
obj[cur] = cur;
}
console.log(arr);
</script>
- 方法封装
<script>
// 数组去重方法封装
function arrNoRepat(arr) {
var obj = {};
for (var i = 0; i <arr.length; i++) {
var cur = arr[i];
if (obj[cur] == cur){
arr[i] = arr[arr.length-1];
arr.length--;
i--;
continue;
}
obj[cur] = cur;
}
return arr;
}
var arr1 = [1,1,1,1,1,1,2,2,2,2,3,4,5,324,32,421,213,21,100];
console.log(arrNoRepat(arr1));
</script>
- 判断ASCll值去重
<script>
var str = "1233fddfd&3434fdsaff&454545&4545444rfdsfds&545gdsgs";
var ary = [];
//判断ASCll值,如果在48-57或者97-122,就放进数组
for (var i = 0; i <str.length ; i++) {
var code = str.charCodeAt(i);
if (code >=48 && code <= 57 || code >= 97 && code <= 122){
//如果数组中不存在相同的项,才添加
if (ary.indexOf(str[i]) == -1){
ary.push(str[i])
}
}
}
//数组l排序
ary.sort();
console.log(ary.join(","));
</script>
- 字符串去重
<script>
//把下面的字符串去重,并去除掉特殊字符按照数字在前字母在后的顺序排序字符串
var str = "1233fddfd&3434fdsaff&454545&4545444rfdsfds&545gdsgs";
// 1、去重
var newstr = "";
for (var i = 0; i < str.length; i++) {
var s = str[i];
if (newstr.indexOf(s) == -1) {
newstr += (str[i])
}
}
console.log(newstr);
// 2.去除特殊字符
var w = newstr.replace("&", "")
console.log(w);//123fd4sa5rg
//3.排序
var str1 = '';
var str2 = '';
for (var i = 0; i < w.length; i++) {
if (w.charCodeAt(i) < 65) {
str1 += w[i]
} else {
str2 += w[i]
}
}
console.log(str1+str2);
// console.log(str2);
</script>
- 最简单的数组去重
[... new Set([1,'测试',2,2,2,2,1,1,1,1,1,1,33,3,3,3,3])]