当前位置:首页|资讯

7-JSA数组维度转换

作者:拉小登Excel发布时间:2024-09-14


----------


▉  为什么要数组维度的转换?


在昨天的教程里我们讲过,表格里面因为有行和列的坐标,所以引用出来的单元格数据,默认是一个二维数组,这在后续的计算时,会有很多的不便。


▶  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的结构已经变成一个二维数组。





同时单元格的数据,也赋值成功了。


我们可以保存这个代码,在后续学习工作中可能会反复用到这个一维到二维的相互转换。





Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1