一、高性能数组去重
// 需要 es6 支持
function distinct(a, b) {
return Array.from(new Set([...a, ...b]))
}
// sort 的方式
function distinct(a, b) {
let arr = a.concat(b)
arr = arr.sort()
let result = [arr[0]]
for (let i=1, len=arr.length; i<len; i++) {
arr[i] !== arr[i-1] && result.push(arr[i])
}
return result
}
// obj 的方式
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
}
二、二维数组去重
// 根据二维数组中 某一个数据删除
var arr = [
[1, 2, 3],
[2, 2, 3],
[3, 2, 4],
[5, 6, 1],
[1, 3, 3]
];
let result = []
let obj = {}
for (let item of arr) {
if (!obj[item[2]]) {
result.push(item)
obj[item[2]] = 1
}
}
console.log('result', result)
// 去除二维数组中相同数据的数组
var arr = [
[1, 2, 3, 4],
[3, 4, 5, 6],
[1, 2, 3, 4]
]
var removeRepeat = function (arr) {
var obj = {};
for (var i = 0; i < arr.length; i++) {
// 判断当前项是否遍历过,是则删除,否存入obj以作对照
if (obj.hasOwnProperty(arr[i])) {
arr.splice(i, 1)
i++;
}
obj[arr[i]] = i;
}
return arr;
}