js 去重的十种方法
「这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战」
大家好,我是 摸鱼小公举,真正的强者,不会怨天尤人,如果想不被别人看轻,你就只有付出比别人多十倍百倍的努力,才能站的比别人更高。上一篇文章是 算法题-找出字符串中不含有重复字符的最长子串的长度 ;今天我们来学习一下 js 去重的十种方法。
先给定一个数组
var arr=[2,3,3,4,5,5,4,6,3]
第一种方法 利用Set
var arr2=[...new Set(arr)]
console.log(arr2) // [2, 3, 4, 5, 6]
执行所需要时间如下
第二种方法利用 Array.from 和 Set
var arr2=Array.from(new Set(arr))
console.log(arr2) // [2, 3, 4, 5, 6]
执行所需要时间如下
第三种方法利用 Map 对象
const map = new Map();
var arr2 = [];
for (var i = 0; i < arr.length; i++) {
if (!map.has(arr[i])) { //查找是否含有key
map.set(arr[i], true) //添加key和value
console.log(map)
arr2.push(arr[i]);
}
}
console.log(arr2) // [2, 3, 4, 5, 6]
执行所需要时间如下
第四种方法利用 Array.includes
var arr2 = []
for (j = 0; j< arr.length; j++) {
if(!arr2.includes(arr[j])){
arr2.push(arr[j])
}
}
console.log(arr2) // [2, 3, 4, 5, 6]
执行所需要时间如下
第五种方法利用 Array.sort
arr = arr.sort() //[2, 3, 3, 3, 4, 4, 5, 5, 6]
var arr2= [arr[0]];
//先把第一个元素放进新数组,其次相邻两个一一对比,不相等就把当前遍历值放进新数组
for (var i = 1; i < arr.length; i++) {
if (arr[i] !== arr[i-1]) {
arr2.push(arr[i]);
}
}
console.log(arr2) // [2, 3, 4, 5, 6]
执行所需要时间如下
第六种方法双重循环依次对比
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
if(arr[i]===arr[j] && i!=j){ //双重循环依次对比,并且索引不一样的时候删除当前索引的值
arr.splice(j,1)
}
}
}
console.log(arr) // [2, 3, 4, 5, 6]
执行所需要时间如下
第七种方法利用 Array.indexOf
var arr2 = []
for (j = 0; j< arr.length; j++) {
if(arr2.indexOf(arr[j])==-1){
arr2.push(arr[j])
}
}
console.log(arr2) // [2, 3, 4, 5, 6]
执行所需要时间如下
第八种方法利用 Array.filter
var arr2=arr.filter((item,index)=>{
return arr.indexOf(item)===index //数组包含item的值则返回对应的下标
})
console.log(arr2) // [2, 3, 4, 5, 6]
执行所需要时间如下
第九种方法利用双重循环和开关思想
var arr2 = []
var flag = false
for (j = 0; j< arr.length; j++) {
for (k = 0; k < arr2.length; k++) {
if (arr[j] == arr2[k]) {
flag = true;
}
}
if (flag == false) {
arr2.push(arr[j])
}
flag = false
}
console.log(arr2) // [2, 3, 4, 5, 6]
执行所需要时间如下
第十种方法利用 Array.sort 和递归
function loop(index){
if(index >= 1){ //当index < 1 时就会停止调用
if(arr[index] === arr[index-1]){ //当前索引的值如果与前一个索引值相等就删除当前索引值
arr.splice(index,1);
}
loop(index - 1); //递归loop,然后数组去重
}
}
loop(arr.length-1);//最大索引index
console.log(arr2) // [2, 3, 4, 5, 6]
执行所需要时间如下
结语:
去重方法远不止这十种,这里是按照运行时间的从少到多排序的,越靠后的性能越不好,推荐使用前面两种方法代码简洁不影响性能。好了文章到此就结束了,欢迎大家( 点赞+评论+关注 ) 有问题可以来互相交流一下。希望这篇文章对大家有帮助,也希望大家多多支持我,今天是我参与2022首次更文挑战的第12天,加油!
转载自:https://juejin.cn/post/7063262767871950884