第6天,JSA二维数组
创作者俱乐部成员
什么是二维数组?
表格中的数据有行、列之分,A1就是A列第1行的单元格,这种行列就像是一个坐标系,有横轴、纵轴,这就是二维。
在JavaScript中也可以模拟出这样的二维数据,很简答,给把数组的每个参数中,再赋值一个数组就可以了。
比如上面表格中的数据,就可以使用下面的JSA代码来填充。
```
function test(){
let a= [[1,2,3],[4,5,6]]
Range("A1:C2").Value2=a
}
```
为什么要用二维数组?
JSA中提到数组,一般都是指的一维数组,因为表格后多行多列的存储结构,所以在处理单元格数据的时候,通常获得到的大都是二维数组。
获取数组信息
比如,下面表格中的数据。
可以用下面的JSA获取这个区域的数据,但是获取到的是一个二维数组。
```
function test2(){
let a= Range("A1:C2").Value2
console.log(JSON.stringify(a))
console.log(a.join(","))
}
```
输出的结果如下:
```
[[1,2,3],[4,5,6]]
1,2,3,4,5,6
```
输出数组信息
这里用到了两种输出的方法。
第1个是用JSON.stringify,作用是用JSON的格式来显示数组的结构,能够更好的还原出数组的维度。
```
[[1,2,3],[4,5,6]]
```
第2个事a.join(","),作用是把数组中的元素,用逗号为间隔拼接成一个字符串,有点类似TEXTJOIN函数,这样也能看到数组中的数据,但是数组的结构就丢失了。
```
1,2,3,4,5,6
```
修改数组信息
如果要在每个数值前面加上一个字母A,变成下面的样子。
这就需要掌握二维数组的遍历操作,代码如下:
```
function test3(){
let a= Range("A1:C2").Value2
a.forEach((element)=>{
element = "A" + element;
})
console.log(JSON.stringify(a))
console.log(a.join(","))
}
```
关于数组循环遍历的知识点,上一篇文章,我已经写过了,请参考这里。
https://note.mowen.cn/note/detail?noteUuid=J7LVGN-w742nmN7I3_KYr
但是上面的代码计算结果是错误,并没有修改元素的内容,对应的结果如下:
```
[[1,2,3],[4,5,6]]
1,2,3,4,5,6
```
因为forEach循环中的element是一个临时变量,不会写入到数组a中去。
正确的代码,应该是逐行、逐列的遍历a数组,然后把修改后的内容,再赋值到a数组中去。代码如下:
```
function test4(){
let a= Range("A1:C2").Value2
let b=[[]];
for(let r=0;r <a.length;r++){
for(let c=0; c<a[0].length;c++){
a[r][c]="A" + a[r][c]
}
}
console.log(JSON.stringify(a))
console.log(a.join(","))
Range("A1:C2").Value2=a
}
```
代码24~27行,使用两个for循环嵌套,完成了行、列的遍历,并通过26行,把修改后的数据又保存到了数组a中去。
最后输出的结果如下:
```
[["A1","A2","A3"],["A4","A5","A6"]]
A1,A2,A3,A4,A5,A6
```
另外,第31行代码,将数组a的值,又填充到了单元格中去,修改后的效果如下:
MAP遍历数组
Javascript中遍历数组的方法还有很多,比如Map函数。
下面第39行代码,是使用Map函数遍历并修改了数组的内容,代码更加简洁。
```
function test5(){
let a= Range("A1:C2").Value2
a.forEach((element)=>{
element = "A" + element;
})
let b = a.map(subArray => subArray.map(num => 'A' + num));
console.log(JSON.stringify(b))
console.log(b.join(","))
Range("A1:C2").Value2=b
}
```
更多关于map函数的用法,后面再介绍。