【问题标题】:How to loop through columns and update variable如何遍历列并更新变量
【发布时间】:2014-02-14 08:29:44
【问题描述】:

挠头后,我正在寻找正确方向的指针。
我有一个有很多行的谷歌电子表格。行被添加,脚本只查看最新的行。

没有正式的计算机课程,我只是在学习,虽然可能是最低效的方式。

我有一系列由单元格的值填充的变量,Data1,Data2 等等,直到行完成 iaw 列数。它只有一行,我不想处理超过 1 行。

目前,我已经编写代码依次查看每个:

var Data1 = sh.getRange(row,1).getValues()[0];
var Data2 = sh.getRange(row,2).getValues()[0];
var Data3 = sh.getRange(row,3).getValues()[0];
var Data4 = sh.getRange(row,4).getValues()[0];

等等……

这与装满鱼的水壶一样有效,因此查看数组(如果这是解决方案)以循环遍历行、单行并返回一个数组,稍后我可以在某些 html 中调用该数组,即……

<td width="443" bgcolor="#FFFFFF" colspan="3">' + Data1 + '</td><td width="245" b....

谁能给我推荐一些我可以完全理解数组可以帮助的例子,大多数例子似乎是指二维数组,但没有解释之后如何调用这些值......

欢迎任何帮助...

J

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    Javascript(以及其他语言)中的数组是事物的列表,可以是单词(字符串)、数字(int、float)或其他数组

    它有点像一个有序的盒子,你把东西一个接一个地放在里面。

    数组中的每个项目都有一个“索引”,我们从 0 开始计数。

    所以数组:

    var friut = ["apple", "banana", "orange"];
    

    具有索引为 0、1 和 2 的三个项目

    通过调用索引,我们可以从数组中获取项目。

    console.log( friut[0] ); //prints out "apple"
    
    console.log( fruit[1] ); //prints out "banana"
    
    console.log( friut[2] ); //prints out "orange"
    

    数组的另一个属性是“长度”,这样您就可以知道数组中有多少项。

    console.log(friut.length()); //prints out 3, because there are three items in the array
    

    既然知道一个数组有多长,我们就可以用循环来调出数组中的每一项

    /* 
    while "count" is less than the length of the array "fruit", perform an operation
    and each time add 1 to count (thats the ++count part)
    so when "count" reaches the same number as fruit.length(), stop
    */
    for(var count = 0; count < friut.length(); ++count)
    {
        console.log( friut[count] );
    }
    

    通过这种方式,您可以用一些在屏幕上绘制对象的脚本替换“console.log()”。

    请记住,要从数组中获取元素,您需要调用它的索引,这只是它在列表中的编号。

    我希望这有助于理解。

    至于将数据放入数组中,您首先要创建一个数组,然后使用“push”命令将数据放入其中。

    var dataArray = [];
    dataArray.push( sh.getRange(row,1).getValues()[0] );
    dataArray.push( sh.getRange(row,2).getValues()[0] );
    dataArray.push( sh.getRange(row,3).getValues()[0] );
    dataArray.push( sh.getRange(row,4).getValues()[0] );
    

    那么你可以这样做:

    for(var count = 0; count < dataArray.length(); ++count)
    {
        document.write("<td width=\"443\" bgcolor=\"#FFFFFF\" colspan=\"3\">" + dataArray[count] + "</td><td width=\"245\" b....");
    }
    

    干杯!

    ...这里有一个链接可以帮助您了解数组的细节...

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

    【讨论】:

    • Jason,非常感谢您花时间解释,这确实有很大帮助。最后一个问题,在我晚上睡觉并梦想 Java 之前,我可以使用类似的代码循环将数据推送到 dataArray 中吗?有些工作表可能有 100 多列,所以循环推送似乎更有效.... 很抱歉很痛苦...
    • 是的,你可以。如果你得到的数据在一个数组中,你可以继续循环源数组并推入一个新数组……但是如果你的数据已经在一个数组中,为什么要把它移到一个新数组中呢?只需循环您的源数组并整天抽出!
    【解决方案2】:

    您还提到了一个二维数组。

    这只是一个数组数组。

    让我们回到水果,假设我们有三个数组

    var apples = ["gala", "washington", "fuji"];
    var bananas = ["cavendish", "plantain", "lady finger"]
    var oranges = ["valencia", "navel", "blood"];
    

    假设我们将这三个列表放在另一个列表中

    var fruit = [apples, bananas, oranges];
    

    所以,现在“fruit”是一个包含三个列表的列表。或者用 Javascript 的说法, “fruit”是一个包含三个数组的数组,或者fruit是一个二维数组。

    为什么是 2D?好吧,如果我们把它画出来,我们可以看到它是二维的

    fruit = 
    ---------------------------------------------
    | "gala"       | "cavendish"   | "valencia" | 
    | "washington" | "plantain"    | "navel"    | 
    | "fuji"       | "lady finger" | "blood"    |
    ---------------------------------------------  
    

    每个条目几乎可以被认为是 X、Y 坐标平面上的点(我完全会为这个陈述感到悲伤,但对于一个基本示例来说已经足够了)。

    "gala" is at (0,0)
    "plaintain" is at (1,1)
    "blood" is at (2,2)
    

    请记住,我们从 0 开始索引计数! 低看!如果我们在数组fruit上使用这个约定,我们可以从数组中得到一个水果

    console.log( fruit[0][0] ); //prints gala
    console.log( fruit[1][1] ); //prints plantain
    console.log( fruit[2][2] ); //prints blood
    
    console.log( fruit[0][2] ); //prints fuji
    console.log( fruit[2][0] ); //prints valencia
    

    好吧,请注意,如果您的所有数组的大小(长度)都相同,这将非常有用,但如果它们不是,那么您将遇到问题。看看

    fruit = 
    ---------------------------------------------
    | "gala"       | "cavendish"   | "valencia" | 
    | "washington" | "lady finger" | "navel"    | 
    | "fuji"       |               | "blood"    |
    ---------------------------------------------  
    

    哇,“plaintain”不见了,所以如果我尝试打印“lady finger”的旧地址

    console.log( fruit[1][2] ); //no way! error town!
    

    Javascript 会抱怨。随着“平原”的消失,“女士手指”有了新的索引。在您知道要寻找什么之前,这些类型的东西会让您搞砸。

    有点长,希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多