数组去重的几种方法
1.遍历数组法
----
这是最简单的数组去重方法,实现思路:新建一新数组,传入要去重的数组,遍历该数组,若值不在新数组中则加入该数组;需要注意点:判断值是否在数组的方法“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;
}
2.对象键值对法
----
思路:新建一对象以及数组,遍历传入的数组,判断值是否为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://bianchenghao.cn/hz/146607.html