数组扁平化 去重 排序

783 阅读1分钟

数组扁平化 去重 排序

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();