首先创建一个空对象,然后用 for 循环遍历
利用对象的属性不会重复这一特性,校验数组元素是否重复
(效率最高)
function distinct(a, b) {
let arr = a.concat(b)
let result = []
let obj = {}
for (let i of arr) {
if (!obj[i]) {
result.push(i)
obj[i] = 1
}
}
return result
}
ES6中提供的Set new 一个 Set
(效率第二)
var arr = ['aaa', 'bbb', 'ccc', 'ddd','eee','fff','fff','fff','eee','ddd'];
const set = new Set(arr);
console.log(Array.from(set));
//输出 >>>(6)["aaa", "bbb", "ccc", "ddd", "eee", "fff"];
-----------------------------------------------------------------------
封装成方法
function dedupe(array) {
return console.log(Array.from(new Set(array)));
}
dedupe([1,1,2,3]);
//输出 >>>(3)["1", "2", "3"];
常用的数组去重 双层for循环
(效率最差)
let l = arr.length;
for (let i = 0; i < l; i++) {
for (let j = i + 1; j < l; j++) {
if (arr[i].id == arr[j].id) { //数组对象的话 这里判断是数组对象某个参数如果相等
arr.splice(j, 1); // splice 会改变数组长度,所以要将数组长度 l 和下标 j 减一
l--;
j--;
}
}
console.log(arr)
}
/**
**封装方法*/
function distinct(a, b) {
let arr = a.concat(b);
for (let i=0, len=arr.length; i<len; i++) {
for (let j=i+1; j<len; j++) {
if (arr[i] == arr[j]) {
arr.splice(j, 1);
len--;
j--;
}
}
}
return arr
}
评论