一、利用es6中的Set,Set类似于数组,成员的值都是唯一的,没有重复的。
let arr = [1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1];
let newArr = [...new Set(arr)];
console.log(newArr); // [1, 2, 3, 4, 5, 6, 7]
二、利用数组 filter() 去重, 不会对空数组进行检测,不会改变原始数组。
newArr = arr.filter((val, index, arr) => {
return arr.indexOf(val) === index
})
// [1, 2, 3, 4, 5, 6, 7]
去除重复元素依靠的是indexOf
总是返回第一个元素的位置,后续的重复元素位置与indexOf
返回的位置不相等,因此被filter
滤掉了。
三、获取没重复最右一值放入到新数组。
function uniq(arr) {
newArr = [];
let len = arr.length;
for (let i=0; i<len; i++) {
for (let j=i+1; j<len; j++) {
if (arr[i] == arr[j]) {
i++;
j = i;
}
}
newArr.push(arr[i])
}
return newArr
}
uniq(arr); // [7, 6, 5, 4, 3, 2, 1]