let arr = [[21, 2, 17, 18, 2], [3, 4, 95, 5, 5], [6, 6, 7, 8], [9, 10, [11, 12]]];
// =>【1、扁平化】 使用 ES6 中提供的 Array.prototype.flat 处理
// arr = arr.flat(Infinity);
// =>【2、扁平化】 把数组直接变成字符串即可(数组 toString 之后,最后会变为以逗号分隔的字符串)
// arr = arr.toString().split(',').map(item => {
// return Number(item);
// })
// =>【3、扁平化】
// arr = arr.join('|').split(/(?:,||)/g).map(item => {
// return Number(item);
// })
// =>【4、扁平化】 JSON.stringify
// arr = JSON.stringify(arr).replace(/([|])/g, '').split(',').map(item => Number(item));
// =>【5、扁平化】 some 方法进行判断检测:验证数组中的某一项有没有符合函数中提供的规则的
// while (arr.some(item => Array.isArray(item))) {
// arr = [].concat(...arr);
// }
// console.log(arr);
// =>【6、扁平化】 find 方法
//------------ find 和 some 的区别:some 返回的是 boolean, find 找到符合规则的,返回当前这一项,没有找到符合规则的,返回 undefined ------------
// =>【7、扁平化】在闭包函数中自己递归处理
~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();
console.log(arr)
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// =>【1、去重排序】基于 ES6 中的 new Set() 去重数组并升序
// [...new Set(arr)]
// Array.from(new Set(arr))
arr = Array.from(new Set(arr)).sort((a, b) => a - b);
console.log(arr);
// =>【2、去重排序】indexOf
// let res = [];
// for(let i = 0; i < arr.length; i++){
// if(res.indexOf(arr[i]) === -1){
// res.push(arr[i]);
// res.sort((a, b) => a - b);
// }
// }
// console.log(res);
// =>【3.1、双重 for 循环 将数据和后面的数据进行比对】
// function Arr(arr) {
// let res = [],
// isRepeat = false;
// for (let i = 0; i < arr.length; i++) {
// isRepeat = false;
// for (let j = i + 1; j < arr.length; j++) {
// if (arr[i] === arr[j]) {
// isRepeat = true;
// break;
// }
// }
// if (!isRepeat) {
// res.push(arr[i]);
// res.sort((a, b) => a - b);
// }
// }
// return res;
// }
// console.log(Arr(arr));
// =>【3.2、双重 for 循环 将数据和新保存的数据进行比对】
// function Arr(arr) {
// let res = [],
// isRepeat = false;
// for (let i = 0; i < arr.length; i++) {
// isRepeat = false;
// for (let j = 0; j < res.length; j++) {
// if (res[j] === arr[i]) {
// isRepeat = true;
// break;
// }
// }
// if (!isRepeat) {
// res.push(arr[i]);
// res.sort((a, b) => a - b);
// }
// }
// return res;
// }
// console.log(Arr(arr));
// =>【4、去重排序】 forEach 方法
// function Arr(arr) {
// let res = [];
// arr.forEach(function (item, idx, arr) {
// if(!res.includes(item)){
// res.push(item);
// res.sort((a, b) => a - b);
// }
// })
// return res;
// }
// console.log(Arr(arr));
// =>【5、去重排序】 reduce 方法
// function Arr(arr) {
// return arr.sort((a, b) => a - b).reduce(function (res, elem, arr) {
// if (res.length === 0 || res[res.length - 1] !== elem) {
// res.push(elem);
// }
// return res;
// }, [])
// }
// console.log(Arr(arr));