js数组去重
js数组去重是我们经常会用到、也是最基础的算法,下面介绍几种方法,适合新人学习。
//排序后相邻去除法
var arr = [1, 1, 2, 2, 2, 2, 3, 3, 4, 54, 5, 5, 5, 5, “aaa”, “aaaa”]
function uniq(array) {
array.sort();
var res = [array[0]];
for (var i = 1; i < array.length; i++) {
if (array[i] !== res[res.length - 1]) {
res.push(array[i]);
}
}
return res;
}
console.log(uniq(arr));
//最简单数组去重法
var arr = [1, 1, 2, 2, 2, 2, 3, 3, 4, 54, 5, 5, 5, 5, "aaa", "aaaa"]
function uniq(array) {
var temp = []; //一个新的临时数组
for (var i = 0; i < array.length; i++) {
if (temp.indexOf(array[i]) == -1) {
temp.push(array[i]);
}
}
return temp;
}
console.log(uniq(arr));
//对象键值法去重
var arr = [1, 1, 2, 2, 2, 2, 3, 3, 4, 54, 5, 5, 5, 5, "aaa", "aaaa"]
function uniq(array) {
var temp = {}, r = [], len = array.length, val, type;
for (var i = 0; i < len; i++) {
val = array[i];
type = typeof val;
if (!temp[val]) {
temp[val] = [type];
r.push(val);
} else if (temp[val].indexOf(type) < 0) {
temp[val].push(type);
r.push(val);
}
}
return r;
}
console.log(uniq(arr));
//数组下标法
var arr = [1, 1, 2, 2, 2, 2, 3, 3, 4, 54, 5, 5, 5, 5, "aaa", "aaaa"]
function uniq(array) {
var temp = [];
for (var i = 0; i < array.length; i++) {
//如果当前数组的第i项在当前数组中第一次出现的位置是i,才存入数组;否则代表是重复的
if (array.indexOf(array[i]) == i) {
temp.push(array[i])
}
}
return temp;
}
console.log(uniq(arr));
var arr = [1, 1, 2, 2, 2, 2, 3, 3, 4, 54, 5, 5, 5, 5, "aaa", "aaaa"]
var res = [];//接受不重复的数据
// 1:获取到arr中每一 个值
for (var i = 0; i<arr.length; i++) {
var flag = true;// 表示不重复true false 重复
//与第一次获取到值:之前的数据进行比价,看是否有重复的
for (var j = 0; j < i; j++) {
//如果有重复的,跳出本次循环
if (arr[i] === arr[j]) {
//重复
flag = false;
break;//循环次数少:性能更高
}
}
if (flag) {// flag不会将重复数据:添加到res中
res.push(arr[i])
}
}
console.log(res)
var arr = [1, 2, 2, 2, 2, 3, 3, 4, 54, 5, 5, 5, 5, "aaa", "aaaa"]
var res = [];
for (var i = arr.length-1;i>=0; i--) {
var flag = true;
//数据验证
for (var j = i-1; j >=0; j--) {
if (arr[i] === arr[j]) {
flag = false;
arr.splice(j,1);
break
}
}
if(flag){
res.unshift(arr[i])
}
}
console.log(res)