1. 主页
  2. 文档
  3. 学习君土脚本
  4. 君土脚本 第一步
  5. 数组

数组

在本模块的最后一篇文章中, 我们将看看数组 —— 一种将一组数据存储在单个变量名下的优雅方式。 现在我们看看它有什么用,然后探索如何来创建一个数组,检索、添加和删除存储在数组中的元素,以及其他更多的功能。

数组是什么?

数组通常被描述为“像列表一样的对象”; 简单来说,数组是一个包含了多个值的对象。数组对象可以存储在变量中,并且能用和其他任何类型的值完全相同的方式处理,区别在于我们可以单独访问列表中的每个值,并使用列表执行一些有用和高效的操作,如循环 – 它对数组中的每个元素都执行相同的操作。 也许我们有一系列产品和价格存储在一个数组中,我们想循环遍历所有这些产品,并将它们打印在发票上,同时将所有产品的价格统计在一起,然后将总价格打印在底部。
 

如果我们没有数组,我们必须将每个产品存储在一个单独的变量中,然后调用打印的代码,并为每个产品单独添加。 花费的时间要长得多,效率很低,而且也容易出错。 如果我们有 10 个产品需要添加发票,那就只是有点麻烦而已,但是 100 个,或者 1000 个呢? 我们稍后将在文章中使用这个例子。

创建数组

数组由方括号构成,其中包含用逗号分隔的元素列表。

  1. 假设我们想在一个数组中存储一个文章清单 – 我们会做一些像下面这样的事情。 在您的代码中输入以下行:
定 文章 = ['中庸', '大学', '庄子', '老子', '孙子兵法']; 
控制台.日志(文章);
  1. 在这种情况下,数组中的每个项目都是一个字符串,但请记住,您可以将任何类型的元素存储在数组中 – 字符串,数字,对象,另一个变量,甚至另一个数组。 您也可以混合和匹配项目类型 – 它们并不都是数字,字符串等。尝试下面这些:
定 序列 = [1, 1, 2, 3, 5, 8, 13]; 
定 随机 = ['树', 795, [0, 1, 2]];
  1. 尝试创建您自己的几个数组,然后再继续往下看。

访问和修改数组元素

然后,您可以使用中括号表示法访问数组中的元素,与 检索特定字符串字符 的方法相同。

  1. 在您的代码中输入以下内容:
控制台.日志(文章[0]); // 打印 "中庸"
  1. 您还可以简单地为单个数组元素提供新值来修改数组中的元素。 例如:
文章[0] = '周易'; 
控制台.日志(文章); // 文章 现在为 [ '周易', '大学', '庄子', '老子', '孙子兵法' ]

注意: 我们以前说过,但还是提醒一下 —— 电脑从 0 开始计数!

  1. 请注意,数组中包含数组的话称之为多维数组。 您可以通过将两组方括号链接在一起来访问数组内的另一个数组。
    我们可以这样做:
定 二维数组 = [[0, 1, 2], [3, 4, 5], [6, 7, 8]];
控制台.日志(二维数组[2][2]);
  1. 在继续之前,尝试对您的数组示例进行一些修改。 玩一玩,看看哪些有效,哪些无效。

获取数组长度

你可以通过使用 长/*length*/ 属性获取数组的长度(数组中有多少项元素),这与查找字符串的长度(以字符为单位)完全相同 。 尝试以下代码:

控制台.日志(序列.长);
// 打印 7

虽然 长/*length*/ 属性也有其他用途,但最常用于循环(循环遍历数组中的所有项)。 例如:

定 序列 = [1, 1, 2, 3, 5, 8, 13];
为 (定 甲 = 0; 甲 < 序列.长; 甲++) {
  控制台.日志(序列[甲]);
}

您将在以后的文章中正确地了解循环,但简而言之,这段代码的意思是:

  1. 在数组中的元素编号 0 开始循环。
  2. 在元素编号等于数组长度的时候停止循环。 这适用于任何长度的数组,但在这种情况下,它将在编号 7 的时候终止循环(这很好,因为我们希望最后一位元素的编号是 6)。
  3. 对于每个元素,使用 控制台.日志/*console.log*/() 将其打印到浏览器控制台。

一些有用的数组方法

在本节中,我们将介绍一些相当有用的数组方法,这些方法允许我们将字符串拆分为字符串数组,反之亦然,以及添加或删除元素。

字符串和数组之间的转换

通常,您会看到一个包含在一个长长的字符串中的原始数据,您可能希望将有用的项目分成更有用的表单,然后对它们进行处理,例如将它们显示在数据表中。 为此,我们可以使用 分/*split*/() 方法。 在其最简单的形式中,这需要一个参数,您要将字符串分隔的字符,并返回分隔符之间的子串,作为数组中的项。

注意:  好吧,从技术上讲,这是一个字符串方法,而不是一个数组方法,但是我们把它放在数组中,因为它在这里很合适。

  1. 我们来玩一下这个方法,看看它是如何工作的。 首先,在君土脚本代码中创建一个字符串:
定 大学 = '平天下,治国,齐家,修身,正心,诚意,致知,格物';
  1. 现在我们用一个逗号分隔它:
定 大学项目 = 大学.分(','); 
控制台.日志(大学项目);
  1. 最后,尝试找到新数组的长度,并从中检索一些项目:
控制台.日志(大学项目.长); 
控制台.日志(大学项目[0]); // 数组第一项 
控制台.日志(大学项目[1]); // 数组第二项
控制台.日志(大学项目[大学项目.长-1]); // 数组最后一项
  1. 您也可以使用 串/*join*/() 方法进行相反的操作。 尝试以下:
定 新字串 = 大学项目.串(','); 
控制台.日志(新字串);
  1. 将数组转换为字符串的另一种方法是使用 转字/*toString*/() 方法。 转字/*toString*/() 可以比 串/*join*/() 更简单,因为它不需要一个参数,但更有限制。 使用 串/*join*/() 可以指定不同的分隔符(尝试使用与逗号不同的字符运行步骤4)。
定 五行 = ["金", "木", "水", "火", "土"];
控制台.日志(五行.转字()); //金,木,水,火,土

添加和删除数组项

我们还没有涵盖添加和删除数组元素,现在让我们来看看。 我们将使用在上一节中提到的  文章 数组。 如果没有建立 文章 数组,用以下代码建立。

定 文章 =['中庸', '大学', '庄子', '老子', '孙子兵法'];

首先,要在数组末尾添加或删除一个项目,我们可以使用  压/*push*/() 和 冒/*pop*/()

  1. 让我们先使用 压() —— 注意,你需要添加一个或多个要添加到数组末尾的元素。 尝试下面的代码:
文章.压('三字经'); 
控制台.日志(文章); 
文章.压('百家姓', '千字文'); 
控制台.日志(文章); 
  1. 当方法调用完成时,将返回数组的新长度。 如果要将新数组长度存储在变量中。例如:
定 新长度 = 文章.压('素书'); 
控制台.日志(文章); 
控制台.日志(新长度);
  1. 从数组中删除最后一个元素的话直接使用 冒/*pop*/() 就可以。 例如:
控制台.日志(文章.冒());
  1. 当方法调用完成时,将返回已删除的项目。 你也可以这样做:
定 删除项 = 文章.冒(); 
控制台.日志(文章); 
控制台.日志(删除项);

增/*unshift*/() 和 删/*shift*/() 从功能上与 压/*push*/() 和 冒/*pop*/() 完全相同,只是它们分别作用于数组的开始,而不是结尾。

  1. 首先 增() ——尝试一下这个命令:
文章.增('金刚经'); 
控制台.日志(文章);
  1. 现在 删() —— 尝试一下!
定 删除项 = 文章.删(); 
控制台.日志(文章); 
控制台.日志(删除项);

积极学习:打印这些产品

我们回到前面描述的例子 —— 打印出发票上的产品名称和价格,然后计算总价格并将其印在底部。 在下面的可编辑示例中,包含数字的注释 —— 每个注释标记都是您必须向代码添加内容的地方。 它们如下:

  1. 在 // 数 1 注释下面是一些字符串,每个字符串包含一个产品名称和一个冒号分隔的价格。 我们希望您将其转换为一个数组,并将其存储在名为 商品 的数组中。
  2. 与 // 数 2 注释同一行的是 循环的开头。 在这行中,我们目前有 i <= 0,这是一个条件测试,导致 循环 立即停止,因为它说“当 i 不再小于或等于0”时停止,而 i 从0开始。 我们希望您使用条件测试来替换它,当 i 不再小于 商品 数组的长度时,该条件测试会停止循环。
  3. 就在 // 数 3 注释的下方,我们希望您编写一行代码,将当前数组项目(名称:价格)分成两个独立的项目,一个只包含该名称,一个只包含该价格。 如果您不确定如何执行此操作,请参阅有用的字符串方法文章以获得一些帮助,甚至更好的看看本文中的转换字符串和数组部分。
  4. 作为上述代码行的一部分,您还需要将价格从字符串转换为数字。 如果你不记得如何做,请查看第一个字符串文章。
  5. 有一个名为 总计 的变量被创建,并在代码的顶部赋值为 0。 在循环内(在 // 数 4 注释下面),我们希望您添加一行,将当前项目价格添加到循环中的迭代变量,以便在代码结尾处将正确的总数打印到发票上。 您可能需要一个赋值运算符来执行此操作。
  6. 我们希望您改变 // 数 5 注释的行,以便使  项文本 变量等于“当前项目名称 – 当前项目价格”,例如“李子 - 5.99”,以此将每个项目的正确信息都印在发票上。 这只是简单的字符串连接,您应该对此很熟悉。
名 产品 {
  定 总计 = 0;

  // 数 1
  /*
    '苹果:6.99',
    '李子:5.99',
    '西瓜:1.99',
    '梨:3.99',
    '芭蕉:3.99'
  */

  为(定 i = 0; i <= 0; i++) { // 数 2
    // 数 3
    
    // 数 4

    // 数 5
    定 项文本 = '';
    控制台.日志(项文本);
  }

  控制台.日志('总计:' + 总计.转定点(2));
}

总结

阅读本文后,我们相信您会明白数组是很有用的; 你会看到它们在 君土脚本 中随处可见,通常与循环相关,以便对数组中的每个元素做同样的事情。 我们将教你所有有用的基础知识,了解下一个模块中的循环,但现在你应该给自己鼓掌,并稍加休息; 您已经完成了本单元中的所有文章!