数组扁平化:
指将多维数组 array(嵌套可以是任何层数,例如:[ 1,[2,3],[4,[5] ] ] )转换为一维数组(例如:[1,2,3,4,5] )。
[ 1,[2,3],[4,[5] ] ] -------> [1,2,3,4,5]
方法一: 递归 遍历
具体步骤如下代码所示:
javascript
<script>
//递归的方法
//封装函数
function flatten(arr,newarr){
//遍历arr数组
for(var i=0;i<arr.length;i++){
//判断arr[i]是否为数组 instanceof 判断是否为数组,返回值为true/false
if(arr[i] instanceof Array){
//如果是数组,则递归,再次运行函数
flatten(arr[i],newarr);
}else{
//若果不是数组,则将arr[i]推到新数组newarr中
newarr.push(arr[i]);
}
}
//返回新数组
return newarr;
}
//给出需要扁平化的数组arr
var arr=[1,[2,3,[4]],[5,6]];
//控制台打印
console.log(flatten(arr,[]));
</script>
或者:(推荐上边的递归方式解决)
javascript
function flat(arr1) {
let result = [];
for (let i = 0; i < arr1.length; i++) {
if (Array.isArray(arr1[i])) {
// concat连接两个或更多的数组,不会改变现有的数组,而是返回一个新的数组,不修改原数组
result = result.concat(flat(arr1[i]));
} else {
// push向数组的末尾添加一个或更多元素,并返回新的长度,修改原数组
result.push(arr1[i]);
}
}
return result;
}
var arr1 = [1, [2], [3, 4], [5, [6, [7]]]];
console.log(flat(arr1));
运行结果:
第二种方法: toString()+split()+map()+parseInt()
javascript
var arr2 = [1, [2, [3, [4],5,[6,[7]]]]];
arr2=arr2.toString();
arr2=arr2.split(',');
arr2=arr2.map(function(item){
return parseInt(item);
})
console.log(arr2);
运行结果如下:
第三种方法: 正则 replace和JSON方法
javascript
var arr3 = [1, [2, [3, [4, 5]]]];
function flatten(arr3) {
var str = JSON.stringify(arr3);
// console.log(str);
str = str.replace(/(\[|\])/g, '');
// console.log(str);
str = '[' + str + ']';
// console.log(str);
return JSON.parse(str);
}
console.log(flatten(arr3));
运行结果如下:
第四种方法: flat(infinity)
flat()创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成。
Infinity 无穷大
javascript
var arr4=[1, [2, 3, [4]]];
var result1=arr4.flat(Infinity);
console.log(result1);
运行结果如下: