一. 多维数组
1. 概念
多维数组可以看成是数组的数组。比如二维数组就是一个特殊的一维数组,它的每个元素都是一个一维数组。其他多维数组的概念,大家可以参照二维数组以此类推。
2. 分类
多维数组可以分为:
● 二维数组;
● 三维数组;
● 其他数组;
其实我们在开发时,真正常用的数组也就是一维数组和二维数组,更多维度的数组很少使用。所以接下来在本篇文章中,主要是给大家讲解二维数组相关的内容。
二. 多维数组
理论上,在Java中我们可以定义出任意维度的数组。但高于二维的多维数组,在实际开发中很少使用,大家知道Java中支持这种数据结构即可。如果你感兴趣,可以尝试着自己构造一个三维数组出来,就不在这里过多讲解啦,可以参考如下:
//动态初始化
int[][][] arr= new int[3][3][2];//静态初始化
int[][][] arr2= {{{1,2,3},{4,5,6},{7,8,9}},{{1,2},{3,4}},{{1,2},{3,4,5}}
};
三、多维数组降维的几种方法
1、数组字符串化
let arr = [[123456],[333],789];
arr += '';
arr = arr.split(',');
console.log(arr); // ['123456' , '333', '789']复制代码
2、递归
functiondemo(arr){var newArr = []for(var i = 0; i < arr.length; i++){if(Array.isArray(arr[i])){//如果是数组,调用递归函数 dimension 将其扁平化,然后再 push 到 newArr 中newArr.push.apply(newArr,demo(arr[i]))}else{//不是数组直接 push 到 newArr中newArr.push(arr[i])}}return newArr
}var array = ['1','2',['2',['6',['4','9'],'8'],'5'],'3','3','2']
var reduce = demo(array)
复制代码
3、利用contact
var a = [1,[2],[3,4]]var result = []for(var i = 0; i<a.length; i++){if(a[i].constructor == Array){result = result.concat(a[i])}else{result.push(a[i])}}console.log(resule) // [1,2,3,4]复制代码
4、利用扩展运算符
var a = [1,[2],[3,4]]var result = []result = [].concat(...a)console.log(result) // [1,2,3,4]复制代码
5、利用apply
var a = [1,2,[3,4]]
var result = []
result = Array.prototype.concat.apply([],a)
console.log(result) // [1,2,3,4]复制代码
6、Array.prototype.flat()
var arr1 = [1,2,[3,4]]
console.log(arr1.flat()) // [1,2,3,4]var arr2 = [1,2,[3,4,[5,6]]]
console.log(arr2.flat()) // [1,2,3,4,[5,6]]var arr3 = [1,2,[3,4,[5,6]]]
console.log(arr3.flat(2)) // [1,2,3,4,5,6]//使用 Infinity 作为深度,展开任意深度的嵌套数组console.log(arr3.flat(Infinity)) // [1,2,3,4,5,6]复制代码
7、使用reduce、concat和递归无限反嵌套多层嵌套的数组
var arr1 = [1,2,3,[1,2,3,4[2,3,4]]]
functionflatDeep(arr1){return arr1.reduce((acc,val) => {Array.isArray(val)? acc.concat(flatDeep(val)) : acc.concat(val), []})
}
console.log(flatDeep(arr1)) // [1,2,3,1,2,3,4,2,3,4]