1.递归调用
利用一个循环,对第一层的数组遍历,如果第一层数组的元素不是数组,直接push到新数组里面,如果是数组,递归调用原算法,并和新数组结果进行连接。
两个点:
(1)是如何判断是不是数组;
①Array.isArray(n) 是数组,返回true,不是数组,返回false
②n instanceof Array 是数组,返回true,不是数组,返回false
③n.constructor==Array 是数组,返回true,不是数组,返回false
④内部属性:Object.prototype.toString.call(arr[i])==='[object Array]' 是数组,返回true,不是数组,返回false
(2)数组拼接
[数组1].concat[数组2] 不会修改数组2,会拼接到数组1上
function flatten(arr) {
var result=[];
for(var i=0;i<arr.length;i++){
if(Object.prototype.toString.call(arr[i])==='[object Array]'){
result=result.concat(flatten(arr[i]));
}else {
result.push(arr[i]);
}
}
return result;
}
2.toString方法
把嵌套的数组转成字符串,然后数组的元素会形成以逗号相连的字符串,split逗号分隔