var ary = [1,2,3,2,4,5,6,5,6,6,6,4,3]; /** * 基于对象的属性名不能重复,我们实现高性能的数组去重 * 1.创建一个空对象 * 2.一次遍历数组中的每一项,把每一项存储的值,当做对象的属性名和属性值存储起来 * 第一次循环 1 {1:1} * 第二次循环 2 {1:1,2:2} * 第三次循环 3 {1:1,2:2,3:3} * 第四次循环 2 我们在存储之前做一个判断,判断当前对象中是否存在这个属性,如果存在,说明之前这一项 * 存储的操作,进一步说明之前数组中出现过这个数值(也就是重复了,此时我们把当前项在数组中移除即可) * * * 如何判断对象中是否存在这个属性,如果没有这个属性,值是undefined */ var obj= {}; for (var i = 0; i < ary.length; i++) { var item = ary[i];// 每一次循环从数组中拿出来的这一项 //存储之前需要做判断:如果对象中已经存在这个属性 说明当前 itme 在之前出现过,也就是当前重复了,我们就把当前项删除 if (typeof obj[item] !=='undefined') { /* ary.splice(i,1); i--;//防止数组塌陷 这种方式消耗性能 1,我们把数组最后一项的结果获取到,替换当前项内容 2,在把数组最后一项删除 */ //优化版 ary [i] = ary[ary.length-1]; ary.length--; i--; continue; } //把这一项作为对象的属性名和属性值存储进去 obj [item]= item; } console.log(ary);
数组去重基于对象健值
最新推荐文章于 2021-03-27 16:39:04 发布