实现以下多维数组去重排序。
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];思路
创建一个空数组;使用递归的方法将多维数组元素取出放入空数组;数组去重;数组排序。代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"/> <title></title> </head> <body> </body> <script> var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]; //1.创建一个空数组 var arr1=[]; //2.使用递归将多维数组中的元素取出放到空数组 function findNumber(arr) { arr.map((item)=>{ if(typeof item == 'number'){ arr1.push(item); }else if(typeof item == 'object'){ findNumber(item); } }) }; //调用递归 findNumber(arr); //3.数组去重 arr1 = arr1.filter((item,index)=>arr1.indexOf(item)==index); //4.数组排序 arr1.sort((a,b)=>{ return a-b; }); console.log(arr1); </script> </html>思路
使用 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);思路
通过 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);注:后两种方法是参考网上一些大佬的方法,其精辟之处主要体现在 ES6 新语法的便捷和数组与字符串之间的灵活转换。这也鞭策我们要不断地精进自己的技术,多学习新方法,同时在学习的过程中也能够灵活运用。