第7天,JSA数组维度转换
创作者俱乐部成员
为什么要数组维度的转换?
在昨天的教程里我们讲过,表格里面因为有行和列的坐标,所以引用出来的单元格数据,默认是一个二维数组,这在后续的计算时,会有很多的不便。
1- 二维数组的错误
比如下面这个表格当中,只有一列的数据,现在想要尝试通过JSA代码来获取这个区域的数据,然后通过for循环把这些数字显示出来。
对应的代码如下:
```
function t1_二维数组错误(){
let a = Range("A1:A6")()
a.forEach((e)=>{
console.log(e)
})
}
```
但是代码执行之后,却没有得到任何结果。
我们尝试取消第6行的注释,使用 JSON.stringify来把这个数据的结构还原一下。
```
console.log(JSON.stringify(a))
```
你会发现,虽然只有一列数据,但是得到的依然是二维数组,数组里面的元素,依然是元素,进而导致cosole.log的错误。
2- 二维数组转一维数组
想要让console.log准确的计算,需要把二维数组转换成一维数组,对应的代码如下:
```
function t2_二维数组转一维(){
let a = Range("A1:A6")()
let b =a.flat()
b.forEach((e)=>{
console.log(e)
})
console.log(JSON.stringify(b))
}
```
代码执行效果如下:
前面的123456,是forEach输出的,后面的[1,2,3,4,5,6],是JSON.stringify输出的。
第11行代码,使用了flat()函数,可以把任意维度的数组,变成一维数组。
转换之后可以看到,变量b的结果,就变成了一维的数组。
3- 一维数组赋值错误
一维数组或者二维数组没有好坏之分,只是在使用过程中要根据场景去转换它们的维度。
假如我们现在有一个一维数组,要把这个数组填写到B1:B6这个单元格区域,可以通过下面的代码来执行。
```
function t3_一维数组赋值错误(){
let a = [1,2,3,4,5,6];
let b = [[1],[2],[3],[4],[5],[6]];
Range("B1:B6").Value2= a
}
```
但是代码执行之后,会出现错误。B列里面一列全部都是1。
这是因为在JSA当中,一维数组默认是指一行中不同列的数据。而我们现在是把这些数据全部都放在一列中的不同行。
所以它只是获得了一维数组中的第1个元素。
如果想要把123456准确地填写到B列当中,我们需要使用变量b中的二维数组格式。
```
function t3_一维数组赋值错误(){
let a = [1,2,3,4,5,6];
let b = [[1],[2],[3],[4],[5],[6]];
Range("B1:B6").Value2= b
}
```
我们再尝试去赋值,也可以看到能够准确地得出对应的结果。
4- 一维转二维
那么怎么去把这个维度转换成这个维度呢?
可以使用下面代码来实现。
```
function t4_一维转二维(){
let a = [1,2,3,4,5,6];
let b = a.map(item => [item]);
Range("B1:B6").Value2= b
console.log(JSON.stringify(b));
}
```
通过最后的JSON.stringify输出结果也可以看到,变量b的结构已经变成一个二维数组。
同时单元格的数据,也赋值成功了。
我们可以保存这个代码,在后续学习工作中可能会反复用到这个一维到二维的相互转换。
创作者俱乐部成员
创作者俱乐部成员