数组去重并排序几种方式

一、降维去重并排序

1、 解析多维数组

let arrAy = [ [1, 2, 2,3], [2, 3, 4, 5], [6, 6,7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]
// 数组flat()方法可以把多维数组解析出来(参数为解析的层数)
let newArr = arrAy.flat(4)
//结果为 [1,2,2,3,2,3,4,5,6,6,7,8,9,11,12,12,13,14,10]
let setArr = new Set (input);
setArr.sort(); 

2、数组去重

// 使用拓展运算符...的方式把解析数组后的每一项放入Set结构中进行去重
const a1 = [1, 2];
const a2 = [...a1];//[1,2]
let setArr = new Set(...flatArr)
//结果为[1,2,3,4,5,6,7,8,9,11,12,13,14,10]

3、数组排序
//Set结构不属于数组的一种, 所以Set结构没有Sort方法所以我们需要将Set结构转换为数组
// 使用sort()方法进行排序
//sort 方法默认的排序方式为使用字符的unicode码进行排序 因此我们需要对sort方法传入一个排序的方法

let sortArr = [...setArr].sort((a,b) => a - b)
//结果为[1,2,3,4,5,6,7,8,9,10,11,12,13,14]

二、ES5基础方法

//先创建一个空数组;
//通过递归的方法将多维数组元素取出放入空数组;
//在使用数组去重;
//在使用数组排序

 var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
var arrAy=[];
 function findNumber(arr) {
        arr.map((item)=>{
            if(typeof item == 'number'){
                arrAy.push(item);
            }else if(typeof item == 'object'){
                findNumber(item);
            }
        })
    };
//数组去重
arr1 = arr1.filter((item,index)=>arr1.indexOf(item)==index);
//数组排序
 arr1.sort((a,b)=>{
        return a-b;
    });
    console.log(arr1);
    //结果为[1,2,3,4,5,6,7,8,9,10,11,12,13,14]

三、ES6数组去重排序

//通过 ES6 flat 方法将数组拉平。
//通过 ES6 Set 构造函数对数组去重;
//通过 sort 方法进行排序

var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
arr =Array.from(new Set(arr.flat(Infinity))).sort((a,b)=>{return a-b});
console.log(arr);
   //结果为[1,2,3,4,5,6,7,8,9,10,11,12,13,14]

四、数组字符串转换

// toString() 方法将多维数组转换成字符串。
//split() 方法将字符串转换为一维数组;
//使用 sort 方法进行排序,需要注意的是这时候数组是字符串数组,所以还需要用map转换为数值数组。

Set 方法去重,再通过 Array.from方法将 Set 类型转换为数组类型。
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
 arr = Array.from(new Set(arr.toString().split(",").sort((a,b)=>{ return a-b}).map(Number)));
 console.log(arr);
   //结果为[1,2,3,4,5,6,7,8,9,10,11,12,13,14]

你可能感兴趣的:(js)