第7天,JSA数组维度转换

拉小登Dony
拉小登Dony

创作者俱乐部成员

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

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

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

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

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

山东省
浏览 58
收藏
3
分享
3 +1
4
+1
全部评论 4
 
EnterZero
EnterZero

创作者俱乐部成员

学习学习,打平数组还可以用[...arr]
· 四川省
回复
拉小登Dony
拉小登Dony

创作者俱乐部成员

学到了,感谢大佬分享
· 山东省
回复