昨晚写的小demo,写一个方法合并传入的多个数组,并去除重复元素,具体实现如下:
function merge(bigArray) {
let array = [];
const middeleArray = bigArray.reduce((a,b) => {
return a.concat(b);
});
middeleArray.forEach((arrItem) => {
if(array.indexOf(arrItem) == -1){
array.push(arrItem);
}
});
return array;
}
console.log(merge([[4,5],[1,1],[2,3],[4,2,3]]));
因为要传入多个数组,所以可以传入二维数组的,这样一来可以使用数组的reduce
方法将数组内嵌套的数组依次合并;
关于数组去重,我总结了以下四种:
- 要求必须返回原数组,可以对该数组进行循环,如果当前下标和当前元素在数组中的lastIndex不同,则删除这个元素,代码如下:
arr.forEach((item,index) => {
if(index != arr.lastIndexOf(item)){
arr.splice(index,1);
}
})
要求返回新数组,可以定义一个新数组,对原数组进行循环,判断如果当前元素在新数组中不存在(即index为-1),将其
push
进新数组,也就是demo中的写法。要求返回新数组,最简单的应该是使用数组的
filter
方法,将当前下标和当前元素在数组中的lastIndex相同的元素筛选出来,具体实现如下:
function removeSame(arr) {
return arr.filter((item,index) =>
index ===arr.lastIndexOf(item));
}
注:使用ES6时当=>
后面只有一条语句可以省略{ }
和return
- 要求返回新数组,且要求在去重时将重复元素删掉,也就是说,输入[1,2,2,3],要返回[1,3],就可以利用数组的
filter
方法,将当前元素的index和lastIndex相同(注意比较与第3项的不同)的元素筛选出来,具体实现如下:
function removeSame(arr) {
return arr.filter((item) =>
arr.indexOf(item) === arr.lastIndexOf(item));
}
能想到的暂时就是这些,欢迎补充,我是Miss_cheng