数组去重,是一个面试经常会遇见的问题,这里介绍一些数组去重的方法,比较适合接触JavaScript一段时间的童鞋。
最基础的,通过 indexOf 来判断
/*
* 新建一个 temp 数组用来存放去重后的数组。
* 遍历已传入的数组,indexOf 判断每一项是否在新数组里存在,不存在就 push 进去
* */
let arr = [1, 2, 3, 4, 5, 6, 3, 1, 4, 8, 0, 4, 2];
function unique (array) {
let temp = []; // 用来存放去重后的数组
for (let i = 0; i < array.length; i++) {
if (temp.indexOf(array[i]) === -1) {
temp.push(array[i]);
}
}
return temp;
}
// 这里介绍 另外一种也是通过 indexOf 来实现的,遍历判断数组中的第 i 项的位置是不是 i,
// 如果不是,则代表是重复的。
function unique1 (array) {
let temp = [];
for (let i = 0; i < arr.length; i++) {
if (arr.indexOf(array[i]) === i) {
console.log(array[i], i)
temp.push(array[i]);
}
}
return temp;
}
一行代码实现数组的去重!通过 es6 新的数据结构 Set来实现。它类似于数组,但是成员的值都是唯一的,没有重复的值。
let arr = [1, 2, 3, 4, 5, 6, 3, 1, 4, 8, 0, 4, 2];
const set = [...new Set(arr)];
或者、
Array.from(new Set(arr))
// 笔者认为最高大上的去重方法,有木有! ^_^
比较高效的一种,有点难以理解
/*
* 获取没重复的最右一值放入新数组。
* 循环检测是否有重复的值,出现重复值则进入顶层循环的下一轮进行判断
* */
function unique (array) {
let temp = [];
let index = [];
let l = array.length;
for (let i = 0; i < l; i++) {
for (let j = i + 1; j < l; j++) {
if (array[i] === array[j]) {
i++;
j = i;
}
}
temp.push(array[i]);
index.push(i);
}
return temp;
}
网友评论