先来个需求
把数组[1,[2,[3,4]]]转化为一维数组这个怎么实现
1.循环加递归
function flat(arr) {
//声明一个新的数组
var newArr = [];
//给原数组做循环
for (var i = 0, len = arr.length; i < len; i++) {
// 如果arr[i]是一个数组
if (Array.isArray(arr[i])) {
//那么再次调用这个函数 进行递归
newArr = newArr.concat(flat(arr[i]));
} else {
//否则直接将arr[i]push到新的数组里
newArr.push(arr[i]);
}
}
return newArr;
}
let newarr = flat([1,[2,[3,4]]])
console.log(newarr);
//跟上面的一个道理
function flat(arr){
let newArr =[]
arr.forEach(item=>{
if(Array.isArray(item)){
newArr =newArr.concat(flat(item))
}else{
newArr.push(item)
}
})
}
2.拓展运算符
let arr = [1, [2, [3, 4]]];
function flat(arr) {
//用some方法判断 arr里面的每一项是不是数组
while (arr.some(item => Array.isArray(item))) {
//如果是数组 让他 拼接到一个空数组里
arr = [].concat(...arr);
} //ES6新方法
return arr;
}
console.log(flat(arr))
3.tostring()
//如果数组是一个数字类型数组 可以用tostring()
function flat(arr) {
return arr.toString().split(',').map(function (item) {
return parseInt(item);
})
}
flat(arr)