方法一
map+filter
console.time('f1');
function objDuplicate(obj) {
var map = new Map();
return obj.filter((item) => {
if (!map.has(JSON.stringify(item))) {
map.set(JSON.stringify(item), item);
return true;
}
});
}
objDuplicate(obj);
console.timeEnd('f1');
方法二
借鉴:https://juejin.cn/post/6984625612937773070#comment
console.time('f2');
function uniqueArr(arr) {
const res = [];
arr.forEach((item) => {
if (typeof item === 'object' && item !== null) {
const tmp = res.filter((i) => JSON.stringify(i) === JSON.stringify(item));
if (tmp.length === 0) {
res.push(item);
}
}
});
return res;
}
uniqueArr(obj);
console.timeEnd('f2');
顺便记录一下数组的去重
ES6中去重
let arrs = [1, 10, 1, 2, 2, 4, 5, 1, 9, 10];
console.log([...new Set(arrs)]);
indexOf+for
function dunplicate(arr) {
let res = [];
for (let i = 0; i < arr.length; i++) {
if (res.indexOf(arr[i]) === -1) {
res.push(arr[i]);
}
}
return res;
}
map
function dunplicate(arr) {
var map = new Map();
var res = [];
for (let i = 0; i < arr.length; i++) {
if (!map.has(arr[i])) {
map.set(arr[i], 1);
res.push(arr[i]);
}
}
return res;
}
先排序后去重
function dunplicate(arr) {
var res = [];
arr.sort((a, b) => a - b);
console.log(arr);
var end = arr[0];
res.push(arr[0]);
for (let i = 1; i < arr.length; i++) {
if (arr[i] != end) {
res.push(arr[i]);
end = arr[i];
}
}
return res;
}
其他方法
function dunplicate(ar) {
for (var i = 0; i < ar.length; i++) {
for (var j = i + 1; j < ar.length; j++) {
if (ar[j] == ar[i]) {
ar.splice(j, 1);
j--;
}
}
}
return arrs;
}
let arrs = [1, 10, 1, 2, 2, 4, 5, 1, 9, 10];
// console.log([...new Set(arrs)]);
console.log(dunplicate(arrs));
//有缺陷,当数组中存放1和‘1’会默认去掉其中一个,从而达不到想要的效果
let a = [, 2, 13, 1, 2, 1, '1', '1'];
const delre = (arr) => {
let obj = {};
arr = arr.reduce(function (item, next) {
obj[next.key] ? '' : (obj[next.key] = true && item.push(next));
return item;
}, []);
return arr;
};
console.log(delre(a));
let arrs = [1, 10, 1, 2, 2, 4, 5, 1, 9, 10];
function dunplicate(arr) {
return arr.filter((item, i, arr) => {
return arr.indexOf(item) === i;
});
}
console.log(dunplicate(arrs));