数组去重的几种方法
- ES6 Set去重(ES6常用) -不修改原数组
不考虑兼容性,这种去重的方法代码最少。这种方法还无法去掉“{}”空对象
function unique(arr) {
return Array.from(new Set(arr));
}
- indexOf去重 -修改原数组
function unique(arr) {
for (let i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) != i) {
arr.splice(i, 1);
i--;
}
}
return arr;
}
- indexOf去重 -不修改原数组
新建一个空数组,遍历原数组,判断新数组是否存在当前元素,如果有相同的值则跳过,否则push进数组。
function unique(arr) {
var brr = [];
for (var i = 0; i < arr.length; i++) {
if (brr.indexOf(arr[i]) === -1) {
brr.push(arr[i]);
}
}
return brr;
}
- for 嵌套 for 然后 splice(ES5常用) -修改原数组
双层循环,外层循环元素,内层循环时比较值。值相同时,则删去这个值。
function unique(arr) {
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--;
}
}
}
return arr;
}
- sort去重 -不修改原数组
利用sort()排序,然后进行遍历相邻元素。
function unique(arr) {
arr = arr.sort();
var brr = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] !== arr[i + 1]) {
brr.push(arr[i]);
}
}
return brr;
}
- includes去重 -不修改原数组
使用includes方法,判断新数组是否存在,不存在则push
function unique(arr) {
var brr = [];
for (var i = 0; i < arr.length; i++) {
if (!brr.includes(arr[i])) {
brr.push(arr[i]);
}
}
return brr;
}
-
filter去重 -不修改原数组
function unique(arr) { return arr.filter(function (item, index, arr) { return arr.indexOf(item, 0) === index; }); }
参考文章,感谢博主!
https://segmentfault.com/a/1190000016418021?utm_source=tag-newest