网站运营计划书,怎么用本机ip做网站,关闭WordPress摘要,海西高端网站建设价格实现方式1(递归)
普通的递归思路很容易理解#xff0c;就是通过循环递归的方式#xff0c;一项一项地去遍历#xff0c;如果每一项还是一个数组#xff0c;那么就继续往下遍历#xff0c;利用递归程序的方法#xff0c;来实现数组的每一项的连接#xff1a; let arr […实现方式1(递归)
普通的递归思路很容易理解就是通过循环递归的方式一项一项地去遍历如果每一项还是一个数组那么就继续往下遍历利用递归程序的方法来实现数组的每一项的连接 let arr [1,[2,3,[4]]];
function flatten(arr){let newArr [];//这里得用of不能用in用in遍历出来的item是数组下标得注意for(let item of arr){console.log(item);//Array.isArray()是一个安全的函数if(Array.isArray(item)){//concat函数返回一个新数组newArr newArr.concat(flatten(item));}else {newArr.push(item);}}return newArr;
}console.log(flatten(arr));
实现方式2(reduce)
let arr [1,[2,3,[4]]];
function flatten(arr){return arr.reduce(function(pre,current){return pre.concat(Array.isArray(current) ? flatten(current) : current)},[])
}console.log(flatten(arr));
实现方式3(扩展运算符)
这个方法的实现采用了扩展运算符和 some 的方法两者共同使用达到数组扁平化的目的个人认为此方法是最酷的能够给面试官一个惊喜
let arr [1,[2,[3,4]]];
function flatten(arr){while(arr.some(item Array.isArray(item))){console.log(arr);arr [].concat(...arr)}return arr;
}console.log(flatten(arr));
实现方式4
可以通过 split 和 toString 两个方法来共同实现数组扁平化由于数组会默认带一个 toString 的方法所以可以把数组直接转换成逗号分隔的字符串然后再用 split 方法把字符串重新转换为数组
let arr [1, [2, [3, 4]]];
function flatten(arr) {return arr.toString().split(,);
}
console.log(flatten(arr)); // [1, 2, 3, 45]
实现方式5(ES6新增函数flat)
我们还可以直接调用 ES6 中的 flat 方法来实现数组扁平化。flat 方法的语法arr.flat([depth])
其中 depth 是 flat 的参数depth 是可以传递数组的展开深度默认不填、数值是 1即展开一层数组。如果层数不确定参数可以传进 Infinity代表不论多少层都要展开
let arr [1, [2, [3, 4]]];
function flatten(arr) {return arr.flat(Infinity);
}
console.log(flatten(arr)); // [1, 2, 3, 45]
实现方式6(正则表达式)
6正则和 JSON 方法 在第4种方法中已经使用 toString 方法其中仍然采用了将 JSON.stringify 的方法先转换为字符串然后通过正则表达式过滤掉字符串中的数组的方括号最后再利用 JSON.parse 把它转换成数组
let arr [1, [2, [3, [4, 5]]], 6];
function flatten(arr) {let str JSON.stringify(arr);console.log(str);//[1,[2,[3,[4,5]]],6],字符串str str.replace(/(\[|\])/g, );console.log(str);//1,2,3,4,5,6str [ str ];console.log(str);//[1,2,3,4,5,6]return JSON.parse(str);
}
console.log(flatten(arr)); // [1, 2, 3, 45]