JS删除数组中的重复元素
过滤数组中的重复元素,有时我们会需要用到这些方法。
一、遍历数组
一看到去重,首先想到的是遍历去重,再结合indexOf方法,就可以做到去重了。
function distinct(arr) {
var result = [];
for (var i = 0, len = arr.length; i < len; ++i) { // IE9+才支持indexOf
if (-1 === result.indexOf(arr[i])) {
result.push(arr[i]);
}
}
return result;
}
二、判断数组下标
类似于第一种方式:
function distinct1(arr) {
var result = [arr[0]];
for (var i = 1, len = arr.length; i < len; ++i) {
if (i == arr.indexOf(arr[i])) {
result.push(arr[i]);
}
}
return result;
}
利用indexOf判断每项是否在数组中其他位置出现,来判断是否重复。
三、排序后去除相邻元素
function distinct2(arr) {
arr.sort(function(val1, val2) {
return val1 > val2;
});
var result = [arr[0]];
for (var i = 1, len = arr.length; i < len; ++i) {
if (arr[i] !== result[result.length - 1]) {
result.push(arr[i]);
}
}
return result;
}
先将数组排序后,按照相邻元素不相同的方式来筛选重复的元素。
四、优化遍历数组
function distinct3(arr) {
var result = [];
for (var i = 0, len = arr.length; i < len; ++i) {
for (var j = i + 1; j < len; ++j) {
if (arr[i] === arr[j]) {
j = ++i;
}
}
result.push(arr[i]);
}
return result;
}
该方法的实现思路是,获取没有重复的最右一值放入新数组,当检测到有重复时终止当前循环进入顶层循环的下一层判断。