数组去重的几种方法和思路

2020-11-23  本文已影响0人  哆啦咿呀哦

方法1:遍历数组

var arr = ["c", "a", "z", "a", "x", "a", "a", "z", "c", "x", "a", "x"];

var newArr = [];

for (var i = 0; i < arr.length; i++) {

if (newArr.indexOf(arr[i]) === -1) {

// 不存在, 添加到 newArr 中

newArr.push(arr[i]);

}

}

console.log(newArr);

思路:

遍历 arr,看 arr[i], 在 newArr 中是否存在 indexOf 值-1, 说明不存在

(1) 如果不存在, 添加到 newArr 中

(2) 如果存在, 不用管

方法2:数组下标去重法

var arr = ["c", "a", "z", "a", "x", "a", "a", "z", "c", "x", "a", "x"];

var newArr = [];

for (var i = 0; i < arr.length; i++) {

if (arr.indexOf(arr[i]) == i) {

newArr.push(arr[i]);

}

}

console.log(newArr);

思路:如果当前数组的第i项在当前数组中第一次出现的位置

是i,表示第一次出现,存入新数组中

不是i,那么表示第i项是重复的,忽略掉

indexOf  查找值,在数组中第一次出现的下标

方法3:排序后相邻去重法

var arr = ["c", "a", "z", "a", "x", "a", "a", "z", "c", "x", "a", "x"];

arr.sort();

// console.log(arr);//?["a", "a", "a", "a", "a", "c", "c", "x", "x", "x", "z", "z"]

var newArr = [arr[0]];

for (var i = 1, len = arr.length; i < len; i++) {

if (arr[i] !== newArr[newArr.length - 1]) {

newArr.push(arr[i]);

}

}

console.log(newArr);

思路:

将传入的数组进行排序,相同的元素就会相邻

创建新数组,并arr[0];

再遍历数组,将元素与新数组的最后一个值进行比较,若不同则加入新数组。

方法4:优化遍历数组法

var arr = [1, 3, 4, 5, 3, 4, 8, 9, 8, 4];

for (var i = 0; i < arr.length; i++) {

for (var j = i + 1; j < arr.length; j++) {

if (arr[i] == arr[j]) {

arr.splice(j, 1);

j--;

}

}

}

console.log(arr) //[1,3,4,5,8,9]

思路:

遍历传入的数组,元素与右边的元素依次比较,

若元素有重复,则删除右边重复的元素,

若元素与右边的元素没有重复,即跳出内层循环;将下一个元素当做比较对象

上一篇下一篇

猜你喜欢

热点阅读