目录
4. 搭配使用forEach + includes /indexOf /lastIndexOf进行数组去重
5. 利用filter方法 + includes/indexOf/lastIndexOf进行数组去重
一、数组去重
1. 使用双层for循环进行去重
思路:对比前一项和后一项是否相等 相等删除后一项,修正下标
var arr = [1,2,3,4,5,4,1,3,2,1];
function unique(arr){
// 循环前一项
for(var i=0;i<arr.length;i++){
//循环后一项
for(var j=i+1;j<arr.length;j++){
if(arr[i]===arr[j]){
// 删除后一项重复的数组元素
arr.splice(j,1);
// 修正下标
j--;
}
}
}
return arr
}
console.log(unique(arr));
代码运行结果如下:
2. 使用indexOf或者lastIndexOf去重
思路:创建一个新的数组 判断重复数组元素是否存在新数组中 不存在直接添加到新数组
var arr = [1,2,3,4,5,4,1,3,2,1];
function unique(arr){
var newArr = [];
for(var i=0;i<arr.length;i++){
//判断每一项数组元素是否存在新数组中 不存在则添加到新数组中
newArr.indexOf(arr[i])===-1?newArr.push(arr[i]):""
newArr.indexOf(arr[i])===-1?newArr[newArr.length]=arr[i]:""
if(newArr.indexOf(arr[i])===-1){
newArr.push(arr[i])
}
if(newArr.lastIndexOf(arr[i])===-1){
newArr.push(arr[i])
}
}
return newArr
}
console.log(unique(arr));
代码运行结果如下:
3. 使用includes方法进行数组去重
思路:检测数组元素是否存在数组中 存在返回true 不存在返回false
var arr = [1,2,3,4,5,4,1,3,2,1];
var res = arr.includes(6);
console.log(res,arr);
function unique(arr){
var newArr = [];
for(var i=0;i<arr.length;i++){
// newArr.includes(arr[i])===false?newArr[newArr.length]=arr[i]:""
if(!newArr.includes(arr[i])){
newArr.push(arr[i])
}
}
return newArr
}
console.log(unique(arr))
代码运行结果如下:
4. 搭配使用forEach + includes /indexOf /lastIndexOf进行数组去重
var arr = [1,2,3,4,5,4,1,3,2,1];
function unique(arr){
var newArr = [];
arr.forEach(function(item){
newArr.indexOf(item)===-1?newArr.push(item):""
newArr.lastIndexOf(item)===-1?newArr.push(item):""
newArr.includes(item)===false?newArr.push(item):""
})
return newArr
}
console.log(unique(arr));
代码运行结果如下:
5. 利用filter方法 + includes/indexOf/lastIndexOf进行数组去重
var arr = [1,2,3,4,5,4,1,3,2,1];
function unique(arr){
var newArr = [];
return arr.filter(function(item){
return newArr.indexOf(item)===-1?newArr.push(item):""
})
}
console.log(unique(arr));
代码运行结果如下:
6. 利用set去重
思路:set成员是唯一的
var arr = [1,2,3,4,5,4,1,3,2,1];
var set = new Set(arr);
console.log(Array.from(set));
console.log([...set]);
代码运行结果如下:
二、数组扁平化
1. 利用递归实现数组扁平化
var arr = [1,2,[3,4,5,[6,7,8,[9,10,[11,12,[13,14]]]]]];
function flat(arr){
var newArr = [];
for(var i=0;i<arr.length;i++){
if(Array.isArray(arr[i])){
newArr =newArr.concat(flat(arr[i]))
}else{
newArr.push(arr[i])
}
}
return newArr;
}
console.log(flat(arr));
代码运行结果如下:
2. 利用map映射实现数组扁平化
var arr = [1,2,[3,4,5,[6,7,8,[9,10,[11,12,[13,14,'hello']]]]]];
// console.log(arr.toString().split(",")); '1' '2'
function flat(arr){
return arr.toString().split(',').map(function(item){
if(isFinite(+item)===false){
return item
}else{
return +item
}
})
}
console.log(flat(arr));
代码运行结果如下:
3. 利用es6 flat方法进行数组扁平化
思路:展开数组 n Infinity
var arr = [1,2,[3,4,5,[6,7,8,[9,10,[11,12,[13,14,'hello']]]]]];
var res = arr.flat(Infinity);
console.log(res,arr);
代码运行结果如下: