js去重数组
先随机生成两个数组
let arr1 = Array.from(new Array(10000), (x, index)=> index)
let arr2 = Array.from(new Array(50000), (x, index)=>index+index)
方法一: 使用for+idnexOf(或者includes),idnexOf方法返回指定元素在数组中第一次出现的位置,如果没有出现返回-1
let deDuplication=(a,b)=>{
let arr = a.concat(b);
let arrs=[]
for(let i of arr){
arrs.indexOf(i)=== -1 && arrs.push(i)
//!arrs.includes(i) && arrs.push(i)
}
return arrs
}//耗时1120
方法二: 使用Array.filter() + indexOf
let deDuplication=(a,b)=>{
let arr = a.concat(b);
return arr.filter((item, index)=> {
return arr.indexOf(item) === index
})
}//耗时2206
方法三:双重for循环
let arr=[1,2,1,3,3,4]
let deDuplication=(arr)=>{
let arr = a.concat(b);
for (let i=0, len=arr.length; i<len; i++) {
for (let j=i+1; j<len; j++) {
if (arr[i] == arr[j]) {
arr.splice(j, 1);
// splice 会改变数组长度,所以要将数组长度 len 和下标 j 减一
len--;
j--;
}
}
}
return arr
}//耗时4671
方法四:使用 sort() 将数组进行排序,然后比较相邻元素是否相等
let deDuplication=(a,b)=>{
let arr = a.concat(b)
arr = arr.sort()
let arrs = [arr[0]]
for (let i=1, len=arr.length; i<len; i++) {
arr[i] !== arr[i-1] && arrs.push(arr[i])
}
return arrs
}//耗时9
方法五: ES6 新增了 Set 这一数据结构,类似于数组,但 Set 的成员具有唯一性,基于这一特性,就非常适合用来做数组去重了
let deDuplication=(a,b)=>{
return Array.from(new Set([...a, ...b]))
}//耗时20
方法六: 首先创建一个空对象,然后用 for 循环遍历,利用对象的属性不会重复这一特性,校验数组元素是否重复
let deDuplication=(a,b)=>{
let arr = a.concat(b)
let arrs = []
let obj = {}
for (let i of arr) {
if (!obj[i]) {
arrs.push(i)
obj[i] = 1
}
}
return arrs
}//耗时16
方法七: js数组对象去重,利用对象访问属性的方法,判断对象中是否存在key,同方法六。
let deDuplication=()=>{
let arr = [
{key: '01',value: '乐乐'},
{key: '02',value: '博博'},
{key: '03',value: '淘淘'},
{key: '01',value: '乐乐'},
];
var result = [];
var obj = {};
for(let i of arr){
console.log(i.key)
if(!obj[i.key]){
result.push(i);
obj[i.key] = true;
}
}
return result
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。