多维数组降维
//数组降维 面试出现频率 80%
var arr = [1,2,3,4,5,6,7,7,[1,1,3,4,5,6,7,[1,1,2,3,4,5]]];
function fun(arr){
// 两次打散数组 但只是 一次降维
arr = [].concat.apply([],arr); // ES6 --> arr = [].concat(...arr)
if(arr.some( //如果 降维一次的数组 判断 是否 降维过的数组中 是否还包含数组
function(elem,i,arr){ //elem 为 数组中的每个 元素 i 为元素的下标 arr 为传入的数组
// 判断 传入的arr 中是否包含 子数组 返回值为 true ->代表有 否则false ->没有
return Array.isArray(elem)}
)){//arguments。callee() 是函数自身调用自身 即 递归 的经典使用 但是在ES5中 不推荐使用
arr = arguments.callee(arr);
}
// 将降维过的 数组 返回
return arr;
}
//调用函数 传入参数arr 排序 去重 --》测试 注意 :sort 只能按字符串升序排列
var newarr = fun(arr).sort(function(a,b){return a-b}) ;
//详情 查看数组去重的方法三
console.log([...new Set(newarr)])// [1, 2, 3, 4, 5, 6, 7]
/*
知识点 整理: 多维数组
1. 二维数组 什么是二维数组 ?
数组中的子数组
用法和普通数组 一样
如:
for(var r = 0;r<arr.length;r++){
for(var c = 0;c<arr[r].length;c++){
arr[r][c] //当前元素
}
}
2.数组的API //ES6
some 包含
filter 过滤
every 每个
concat 将数组连接在一起 并 可以将数组打散
apply call bind 三者的区别
Set 对象
*/