JS数组去重(1-3)
1.利用对象的key唯一去重
对象的key不可重复,否则后者将覆盖前者。利用该特性,实现数组去重,遍历数组,将数组的每一项做为对象的key值。
<script type="text/javascript">
// 利用对象的key 唯一 去重
$(function(){
// 定义数组
let arr=[1,2,2,4,null,null,'3','aaa',3,5,4,1,2,null,null,'3','aaa',3]
//定义对象
let obj={};
//循环判断
for(let i=0;i<arr.length;i++){
let item=arr[i]
//如果 obj 里面不存在,证明没有重复的元素
if (obj[item] !==undefined) {
//删除数组
arr.splice(i,1);
i--; //元素删除后,数组塌陷问题
continue;
} else{
//如果数组是第一次出现,
obj[item]=item
}
}
})
</script>
2.交换元素位置从而替换调splice方法
交换元素的位置,效率会更高一点,若当前元素重复,则与数组最后一位元素交换位置,i–再次进行判断即可,同时length–,操作数组的长度实现删除数组的最后一个元素,这样便不会影响到数组中其他元素。
$("#btnsplice").click(function(){
// 定义数组
let arr=[1,2,2,4,null,null,'3','aaa',3,5,4,1,2,null,null,'3','aaa',3];
//定义对象
let obj={};
for (let i = 0; i < arr.length; i++) {
let item =arr[i];
if (obj[item] !==undefined) {
// 如果当前元素重复,与数组最后一位交换位置
arr[i]=arr[arr.length-1];
//通过操作数组的长度实现删除数组的最后一位(最后一位是已经交换过来的重复元素)
arr.length--;
i--;
continue;
} else{
obj[item]=item
}
}
console.log(arr);
});
3.Array.filter + Array.indexOf
filter()方法:创建一个新数组,新数组中的元素是指定数组中符合某种条件的所有元素。如果没有符合条件的元素则返回空数组。
filter()不会对空数组进行检测、不会改变原始数组。
原理:返回item第一次出现的位置等于当前的index的元素。
let newArr = arr.filter((item, index) => arr.indexOf(item) === index);