大家好,又见面了,我是你们的朋友全栈君。
这是最简单的数组去重方法,实现思路:新建一新数组,传入要去重的数组,遍历该数组,若值不在新数组中则加入该数组;需要注意点:判断值是否在数组的方法“indexOf”是ECMAScript5 方法,IE8以下不支持,示例如下:
function removeDup(arr) {
let new_arr = [];
arr.forEach((val) => {
if(new_arr.indexOf(val) === -1){
new_arr.push(val);
}
});
return new_arr;
}
思路:新建一对象以及数组,遍历传入的数组,判断值是否为js对象的键,若不是则新增键值,并放入数组中;需要注意的地方:判断是否为js对象键时,会自动对传入的键toString()
;
function removeDup2(arr) {
let obj = {},
new_arr = [],
val,
type;
for(let i = 0, len = arr.length; i < len; i+=1) {
val = arr[i];
type = typeof val;
if(!obj[val]) {
obj[val] = [type];
new_arr.push(val);
}else if(obj[val].indexOf(type) === -1) {
obj[val].push(type);
new_arr.push(val);
}
}
return new_arr;
}
缺点:无法真正区分两个对象,如:`{a:1}`和`{a: 2}`,因为typeof结果都是`"object"`,可用`JSON.stringify()`来解决;
es6优化后如下
function unique(array) {
let obj = {};
let type;
return array.filter((item, index, array) => {
type = typeof item + JSON.stringify(item);
return obj.hasOwnProperty(type) ? false : (obj[type] = item);
} )
}
// 可去除undefined, NaN, Object重复项
4.ES6,Set和Map去重
function unique(array) {
return Array.from(new Set(array));
}
//扩展运算符简化
let unique = (arr) => [...new Set(arr)];
//使用Map
function unique(array) {
let seen = new Map();
return arr.filter((a) => !seen.has(a) && seen.set(a, 1));
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/107295.html原文链接:https://javaforall.cn