数组扁平化 去重 排序
let arr = [
[1, 2, 2],
[3, 4, 5, 5],
[6, 7, 8, 9, [111, 12, [12, 13, [14]]]], 10
];
方法一
使用ES6 Array.prototype.flat()
let newArr = arr.flat(Infinity); //[1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 111, 12, 12, 13, 14, 10]
let newArr2 = [...new Set(newArr.sort((a,b)=>a-b))]; //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 111]
console.log(newArr2);
let newArr = Array.from(new Set(arr.flat(Infinity).sort((a,b)=>a-b)));
console.log(newArr);
方法二:
arr.toString() 数组转成字符串
let newArr = arr.toString(); //1,2,2,3,4,5,5,6,7,8,9,111,12,12,13,14,10
let newArr2 = newArr.split(',').map(item=>Number(item)); // [1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10, 12, 12, 13, 14, 111]
let newArr3 = [...new Set(newArr2.sort((a,b)=>a-b))];
console.log(newArr3);
方法三:
JSON.stringify => 字符串
let newArr = JSON.stringify(arr);//[[1,2,2],[3,4,5,5],[6,7,8,9,[111,12,[12,13,[14]]]],10]
let newArr2 = newArr.replace(/(\[|\])/g,'').split(',').map(item=>Number(item));
let newArr3 = [...new Set(newArr2.sort((a,b)=>a-b))];
console.log(newArr3);
方法四:
arr.some
while(arr.some(item=>Array.isArray(item))){
arr = [].concat(...arr) //[1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 111, 12, 12, 13, 14, 10]
}
let res = [...new Set(arr.sort((a,b)=>a-b))]; //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 111]
console.log(res);
方法五:
递归
~ function () {
function myFlat() {
let result = [],
_this = this;
//=>循环ARR中的每一项,把不是数组的存储到新数组中
let fn = (arr) => {
for (let i = 0; i < arr.length; i++) {
let item = arr[i];
if (Array.isArray(item)) {
fn(item);
continue;
}
result.push(item);
}
};
fn(_this);
return result;
}
Array.prototype.myFlat = myFlat;
}();
arr = arr.myFlat();