索引数组

计算机术语

索引数组存储一系列经过组织的单个或多个值,其中的每个值都可以通过使用一个无符号整数值进行访问。

简介
第一个索引始终是数字 0,且添加到数组中的每个后续元素的索引以 1 为增量递增。正如以下代码所示,可以调用 Array 类构造函数或使用数组文本初始化数组来创建索引数组:
Array 类中还包含可用来修改索引数组的属性和方法。这些属性和方法几乎是专用于索引数组而非关联数组的。
索引数组使用无符号 32 位整数作为索引号。索引数组的最大大小为 2-1,即 4,294,967,295。如果要创建的数组大小超过最大值,则会出现运行时错误。
本部分说明如何使用 Array 类创建和修改索引数组,首先讲的是如何创建数组。修改数组的方法分为三类,包括如何插入元素、删除元素和对数组进行排序。最后一类中的方法将现有数组当作只读数组,这些方法仅用于查询数组。所有查询方法都返回新的数组,而非修改现有数组。本部分结尾讨论了如何扩展 Array 类。
创建数组
Array 构造函数的使用有三种方式。
第一种,如果调用不带参数的构造函数,会得到空数组。可以使用 Array 类的 length 属性来验证数组是否不包含元素。例如,以下代码调用不带参数的 Array 构造函数:
var names:Array = new Array();trace(names.length); // 输出:0
第二种,如果将一个数字用作 Array 构造函数的参数,则会创建长度等于此数值的数组,并且每个元素的值都设置为 。参数必须为介于值 0 和 4,294,967,295 之间的无符号整数。例如,以下代码调用带有一个数字参数的 Array 构造函数:
var names:Array = new Array(3);trace(names.length); // 输出:3trace(names[0]); // 输出:trace(names[1]); // 输出:trace(names[2]); // 输出:
第三种,如果调用构造函数并传递一个元素列表作为参数,将创建具有与每个参数对应的元素的数组。以下代码将三个参数传递给 Array 构造函数:
也可以创建具有数组文本或对象文本的数组。可以将数组文本直接分配给数组变量,如以下示例所示:
查询数组
Array 类中的其余四种方法 concat()、join()、slice() 和 toString() 用于查询数组中的信息,而不修改数组。concat() 和 slice() 方法返回新数组;而 join() 和 toString() 方法返回字符串。concat() 方法将新数组和元素列表作为参数,并将其与现有数组结合起来创建新数组。slice() 方法具有两个名为 startIndex 和 endIndex 的参数,并返回一个新数组,它包含从现有数组分离出来的元素副本。分离从 startIndex 处的元素开始,到 endIndex 处的前一个元素结束。值得强调的是,endIndex 处的元素不包括在返回值中。
以下示例通过 concat() 和 slice() 方法,使用其它数组的元素创建一个新数组:
可以使用 join() 和 toString() 方法查询数组,并将其内容作为字符串返回。如果 join() 方法没有使用参数,则这两个方法的行为相同,它们都返回包含数组中所有元素的列表(以逗号分隔)的字符串。与 toString() 方法不同,join() 方法接受名为 delimiter 的参数;可以使用此参数,选择要用作返回字符串中各个元素之间分隔符的符号。
以下示例创建名为 rivers 的数组,并调用 join() 和 toString() 以便按字符串形式返回数组中的值。toString() 方法用于返回以逗号分隔的值 (riverCSV);而 join() 方法用于返回以 + 字符分隔的值。
对于 join() 方法,应注意的一个问题是,无论为主数组元素指定的分隔符是什么,为嵌套数组返回的值始终以逗号作为分隔符,如以下示例所示:
对数组排序
可以使用三种方法(reverse()、sort() 和 sortOn())通过排序或反向排序来更改数组的顺序。所有这些方法都用来修改现有数组。reverse() 方法用于按照以下方式更改数组的顺序:最后一个元素变为第一个元素,倒数第二个元素变为第二个元素,依此类推。sort() 方法可用来按照多种预定义的方式对数组进行排序,甚至可用来创建自定义排序算法。sortOn() 方法可用来对对象的索引数组进行排序,这些对象具有一个或多个可用作排序键的公共属性。
reverse() 方法不带参数,也不返回值,但可以将数组从当前顺序切换为相反顺序。以下示例颠倒了 oceans 数组中列出的海洋顺序:
Array.CASEINSENSITIVE:此选项可使排序不区分大小写。例如,小写字母 b 优先于大写字母 D。 Array.DESCENDING:用于颠倒默认的升序排序。例如,字母 B 优先于字母 A。 Array.UNIQUESORT:如果发现两个相同的值,此选项将导致排序中止。 Array.NUMERIC:这会导致排序按照数字顺序进行,比方说 3 优先于 10。 以下示例重点说明了这些选项中的某些选项。它创建一个名为 poets 的数组,并使用几种不同的选项对其进行排序。
您也可以编写自定义排序函数,然后将其作为参数传递给 sort() 方法。例如,如果有一个名称列表,其中每个列表元素都包含一个人的全名,但现在要按照姓来对列表排序,则必须使用自定义排序函数解析每个元素,然后使用排序函数中的姓。以下代码说明如何使用作为参数传递给 Array.sort() 方法的自定义函数来完成上述工作:
自定义排序函数 orderLastName() 使用正则表达式从每个元素中提取姓,以用于比较操作。针对 names 数组调用 sort() 方法时,函数标识符 orderLastName 用作参数。排序函数接受两个参数 a 和 b,因为它每次对两个数组元素进行操作。排序函数的返回值指示应如何对元素排序:
返回值 -1 表示第一个参数 a 优先于第二个参数 b。 返回值 1 表示第二个参数 b 优先于第一个参数 a。 返回值为 0 表示元素具有相同的排序优先级。 sortOn() 方法是为具有包含对象的元素的索引数组设计的。这些对象应至少具有一个可用作排序键的公共属性。如果将 sortOn() 方法用于任何其它类型的数组,则会产生意外结果。
以下示例修改 poets 数组,以使每个元素均为对象而非字符串。每个对象既包含诗人的姓又包含诗人的出生年份。
通常,sort() 和 sortOn() 方法用来修改数组。如果要对数组排序而又不修改现有数组,请将 Array.RETURNINDEXEDARRAY 常量作为 options 参数的一部分进行传递。此选项将指示方法返回反映排序的新数组同时保留原始数组原封不动。方法返回的数组为由反映新排序顺序的索引号组成的简单数组,不包含原始数组的任何元素。例如,如果要根据出生年份对 poets 数组排序,同时不对数组进行修改,请在传递的 options 参数中包括 Array.RETURNINDEXEDARRAY 常量。
以下示例将返回的索引信息存储在名为 indices 的数组中,然后使用 indices 数组和未修改的 poets 数组按出生年份输出诗人:
删除数组元素
可以使用 Array 类的三种方法(pop()、shift() 和 splice())从数组中删除元素。pop() 方法用于从数组末尾删除一个元素。换言之,它将删除位于最大索引号处的元素。shift() 方法用于从数组开头删除一个元素,也就是说,它始终删除索引号 0 处的元素。splice() 方法既可用来插入元素,也可以删除任意数目的元素,其操作的起始位置位于由发送到此方法的第一个参数指定的索引号处。
以下示例使用所有三种方法从数组中删除元素。它创建一个名为 oceans 的数组,以便存储较大水域的名称。数组中的某些名称为湖泊的名称而非海洋的名称,因此需要将其删除。
首先,使用 splice() 方法删除项 Aral 和 Superior,并插入项 Atlantic 和 Indian。传递给 splice() 的第一个参数是整数 2,它表示应从列表中的第三个项(即索引 2 处)开始执行操作。第二个参数 2 表示应删除两个项。其余两个参数 Atlantic 和 Indian 是要在索引 2 处插入的值。
然后,使用 pop() 方法删除数组中的最后一个元素 Huron。最后,使用 shift() 方法删除数组中的第一个项 Victoria。
pop() 和 shift() 方法均返回已删除的项。由于数组可以包含任意数据类型的值,因而返回值的数据类型为 Object。splice() 方法将返回包含被删除值的数组。可以更改 oceans 数组示例,以使 splice() 调用将此数组分配给新的数组变量,如以下示例所示:
您可能会遇到这样的代码,它在数组元素上使用 delete 运算符。delete 运算符用于将数组元素的值设置为 ,但它不会从数组中删除元素。例如,下面的代码在 oceans 数组的第三个元素上使用 delete 运算符,但此数组的长度仍然为 5:
可以使用数组的 length 属性截断数组。如果将数组的 length 属性设置为小于数组当前长度的值,则会截断数组,在索引号高于 length 的新值减 1 处所存储的任何元素将被删除。例如,如果 oceans 数组的排序是将所有有效项放在数组的开始处,则可以使用 length 属性删除数组末尾的项,如以下代码所示:
插入数组元素
可以使用 Array 类的三种方法(push()、unshift() 和 splice())将元素插入数组。push() 方法用于在数组末尾添加一个或多个元素。换言之,使用 push() 方法在数组中插入的最后一个元素将具有最大索引号。unshift() 方法用于在数组开头插入一个或多个元素,并且始终在索引号 0 处插入。splice() 方法用于在数组中的指定索引处插入任意数目的项目。
下面的示例对所有三种方法进行了说明。它创建一个名为 planets 的数组,以便按照距离太阳的远近顺序存储各个行星的名称。首先,调用 push() 方法以添加初始项 Mars。接着,调用 unshift() 方法在数组开头插入项 Mercury。最后,调用 splice() 方法在 Mercury 之后和 Mars 之前插入项 Venus 和 Earth。传递给 splice() 的第一个参数是整数 1,它用于指示从索引 1 处开始插入。传递给 splice() 的第二个参数是整数 0,它表示不应删除任何项。传递给 splice() 的第三和第四个参数 Venus 和 Earth 为要插入的项。
push() 和 unshift() 方法均返回一个无符号整数,它们表示修改后的数组长度。在用于插入元素时,splice() 方法返回空数组,这看上去也许有点奇怪,但考虑到 splice() 方法的多用途性,您便会觉得它更有意义。通过使用 splice() 方法,不仅可以将元素插入到数组中,而且还可以从数组中删除元素。用于删除元素时,splice() 方法将返回包含被删除元素的数组。
全国各地天气预报查询

上海市

  • 市辖区
  • 云南省

  • 临沧市
  • 云南省

  • 丽江市
  • 云南省

  • 保山市
  • 云南省

  • 大理白族自治州
  • 云南省

  • 德宏傣族景颇族自治州
  • 云南省

  • 怒江傈僳族自治州
  • 云南省

  • 文山壮族苗族自治州
  • 云南省

  • 昆明市
  • 云南省

  • 昭通市
  • 云南省

  • 普洱市
  • 云南省

  • 曲靖市
  • 云南省

  • 楚雄彝族自治州
  • 云南省

  • 玉溪市
  • 云南省

  • 红河哈尼族彝族自治州
  • 云南省

  • 西双版纳傣族自治州
  • 云南省

  • 迪庆藏族自治州
  • 内蒙古自治区

  • 乌兰察布市
  • 内蒙古自治区

  • 乌海市
  • 内蒙古自治区

  • 兴安盟
  • 内蒙古自治区

  • 包头市
  • 内蒙古自治区

  • 呼伦贝尔市
  • 内蒙古自治区

  • 呼和浩特市
  • 内蒙古自治区

  • 巴彦淖尔市
  • 内蒙古自治区

  • 赤峰市
  • 内蒙古自治区

  • 通辽市
  • 内蒙古自治区

  • 鄂尔多斯市
  • 内蒙古自治区

  • 锡林郭勒盟
  • 内蒙古自治区

  • 阿拉善盟
  • 北京市

  • 市辖区
  • 吉林省

  • 吉林市
  • 吉林省

  • 四平市
  • 吉林省

  • 延边朝鲜族自治州
  • 吉林省

  • 松原市
  • 吉林省

  • 白城市
  • 吉林省

  • 白山市
  • 吉林省

  • 辽源市
  • 吉林省

  • 通化市
  • 吉林省

  • 长春市
  • 四川省

  • 乐山市
  • 四川省

  • 内江市
  • 四川省

  • 凉山彝族自治州
  • 四川省

  • 南充市
  • 四川省

  • 宜宾市
  • 四川省

  • 巴中市
  • 四川省

  • 广元市
  • 四川省

  • 广安市
  • 四川省

  • 德阳市
  • 四川省

  • 成都市
  • 四川省

  • 攀枝花市
  • 四川省

  • 泸州市
  • 四川省

  • 甘孜藏族自治州
  • 四川省

  • 眉山市
  • 四川省

  • 绵阳市
  • 四川省

  • 自贡市
  • 四川省

  • 资阳市
  • 四川省

  • 达州市
  • 四川省

  • 遂宁市
  • 四川省

  • 阿坝藏族羌族自治州
  • 四川省

  • 雅安市
  • 天津市

  • 市辖区
  • 宁夏回族自治区

  • 中卫市
  • 宁夏回族自治区

  • 吴忠市
  • 宁夏回族自治区

  • 固原市
  • 宁夏回族自治区

  • 石嘴山市
  • 宁夏回族自治区

  • 银川市
  • 安徽省

  • 亳州市
  • 安徽省

  • 六安市
  • 安徽省

  • 合肥市
  • 安徽省

  • 安庆市
  • 安徽省

  • 宣城市
  • 安徽省

  • 宿州市
  • 安徽省

  • 池州市
  • 安徽省

  • 淮北市
  • 安徽省

  • 淮南市
  • 安徽省

  • 滁州市
  • 安徽省

  • 芜湖市
  • 安徽省

  • 蚌埠市
  • 安徽省

  • 铜陵市
  • 安徽省

  • 阜阳市
  • 安徽省

  • 马鞍山市
  • 安徽省

  • 黄山市
  • 山东省

  • 东营市
  • 山东省

  • 临沂市
  • 山东省

  • 威海市
  • 山东省

  • 德州市
  • 山东省

  • 日照市
  • 山东省

  • 枣庄市
  • 山东省

  • 泰安市
  • 山东省

  • 济南市
  • 山东省

  • 济宁市
  • 山东省

  • 淄博市
  • 山东省

  • 滨州市
  • 山东省

  • 潍坊市
  • 山东省

  • 烟台市
  • 山东省

  • 聊城市
  • 山东省

  • 菏泽市
  • 山东省

  • 青岛市
  • 山西省

  • 临汾市
  • 山西省

  • 吕梁市
  • 山西省

  • 大同市
  • 山西省

  • 太原市
  • 山西省

  • 忻州市
  • 山西省

  • 晋中市
  • 山西省

  • 晋城市
  • 山西省

  • 朔州市
  • 山西省

  • 运城市
  • 山西省

  • 长治市
  • 山西省

  • 阳泉市
  • 广东省

  • 东莞市
  • 广东省

  • 中山市
  • 广东省

  • 云浮市
  • 广东省

  • 佛山市
  • 广东省

  • 广州市
  • 广东省

  • 惠州市
  • 广东省

  • 揭阳市
  • 广东省

  • 梅州市
  • 广东省

  • 汕头市
  • 广东省

  • 汕尾市
  • 广东省

  • 江门市
  • 广东省

  • 河源市
  • 广东省

  • 深圳市
  • 广东省

  • 清远市
  • 广东省

  • 湛江市
  • 广东省

  • 潮州市
  • 广东省

  • 珠海市
  • 广东省

  • 肇庆市
  • 广东省

  • 茂名市
  • 广东省

  • 阳江市
  • 广东省

  • 韶关市
  • 广西壮族自治区

  • 北海市
  • 广西壮族自治区

  • 南宁市
  • 广西壮族自治区

  • 崇左市
  • 广西壮族自治区

  • 来宾市
  • 广西壮族自治区

  • 柳州市
  • 广西壮族自治区

  • 桂林市
  • 广西壮族自治区

  • 梧州市
  • 广西壮族自治区

  • 河池市
  • 广西壮族自治区

  • 玉林市
  • 广西壮族自治区

  • 百色市
  • 广西壮族自治区

  • 贵港市
  • 广西壮族自治区

  • 贺州市
  • 广西壮族自治区

  • 钦州市
  • 广西壮族自治区

  • 防城港市
  • 新疆维吾尔自治区

  • 乌鲁木齐市
  • 新疆维吾尔自治区

  • 伊犁哈萨克自治州
  • 新疆维吾尔自治区

  • 克孜勒苏柯尔克孜自治州
  • 新疆维吾尔自治区

  • 克拉玛依市
  • 新疆维吾尔自治区

  • 博尔塔拉蒙古自治州
  • 新疆维吾尔自治区

  • 吐鲁番市
  • 新疆维吾尔自治区

  • 和田地区
  • 新疆维吾尔自治区

  • 哈密市
  • 新疆维吾尔自治区

  • 喀什地区
  • 新疆维吾尔自治区

  • 塔城地区
  • 新疆维吾尔自治区

  • 巴音郭楞蒙古自治州
  • 新疆维吾尔自治区

  • 昌吉回族自治州
  • 新疆维吾尔自治区

  • 自治区直辖县级行政区划
  • 新疆维吾尔自治区

  • 阿克苏地区
  • 新疆维吾尔自治区

  • 阿勒泰地区
  • 江苏省

  • 南京市
  • 江苏省

  • 南通市
  • 江苏省

  • 宿迁市
  • 江苏省

  • 常州市
  • 江苏省

  • 徐州市
  • 江苏省

  • 扬州市
  • 江苏省

  • 无锡市
  • 江苏省

  • 泰州市
  • 江苏省

  • 淮安市
  • 江苏省

  • 盐城市
  • 江苏省

  • 苏州市
  • 江苏省

  • 连云港市
  • 江苏省

  • 镇江市
  • 江西省

  • 上饶市
  • 江西省

  • 九江市
  • 江西省

  • 南昌市
  • 江西省

  • 吉安市
  • 江西省

  • 宜春市
  • 江西省

  • 抚州市
  • 江西省

  • 新余市
  • 江西省

  • 景德镇市
  • 江西省

  • 萍乡市
  • 江西省

  • 赣州市
  • 江西省

  • 鹰潭市
  • 河北省

  • 保定市
  • 河北省

  • 唐山市
  • 河北省

  • 廊坊市
  • 河北省

  • 张家口市
  • 河北省

  • 承德市
  • 河北省

  • 沧州市
  • 河北省

  • 石家庄市
  • 河北省

  • 秦皇岛市
  • 河北省

  • 衡水市
  • 河北省

  • 邢台市
  • 河北省

  • 邯郸市
  • 河南省

  • 三门峡市
  • 河南省

  • 信阳市
  • 河南省

  • 南阳市
  • 河南省

  • 周口市
  • 河南省

  • 商丘市
  • 河南省

  • 安阳市
  • 河南省

  • 平顶山市
  • 河南省

  • 开封市
  • 河南省

  • 新乡市
  • 河南省

  • 洛阳市
  • 河南省

  • 漯河市
  • 河南省

  • 濮阳市
  • 河南省

  • 焦作市
  • 河南省

  • 省直辖县级行政区划
  • 河南省

  • 许昌市
  • 河南省

  • 郑州市
  • 河南省

  • 驻马店市
  • 河南省

  • 鹤壁市
  • 浙江省

  • 丽水市
  • 浙江省

  • 台州市
  • 浙江省

  • 嘉兴市
  • 浙江省

  • 宁波市
  • 浙江省

  • 杭州市
  • 浙江省

  • 温州市
  • 浙江省

  • 湖州市
  • 浙江省

  • 绍兴市
  • 浙江省

  • 舟山市
  • 浙江省

  • 衢州市
  • 浙江省

  • 金华市
  • 海南省

  • 三亚市
  • 海南省

  • 三沙市
  • 海南省

  • 儋州市
  • 海南省

  • 海口市
  • 海南省

  • 省直辖县级行政区划
  • 湖北省

  • 十堰市
  • 湖北省

  • 咸宁市
  • 湖北省

  • 孝感市
  • 湖北省

  • 宜昌市
  • 湖北省

  • 恩施土家族苗族自治州
  • 湖北省

  • 武汉市
  • 湖北省

  • 省直辖县级行政区划
  • 湖北省

  • 荆州市
  • 湖北省

  • 荆门市
  • 湖北省

  • 襄阳市
  • 湖北省

  • 鄂州市
  • 湖北省

  • 随州市
  • 湖北省

  • 黄冈市
  • 湖北省

  • 黄石市
  • 湖南省

  • 娄底市
  • 湖南省

  • 岳阳市
  • 湖南省

  • 常德市
  • 湖南省

  • 张家界市
  • 湖南省

  • 怀化市
  • 湖南省

  • 株洲市
  • 湖南省

  • 永州市
  • 湖南省

  • 湘潭市
  • 湖南省

  • 湘西土家族苗族自治州
  • 湖南省

  • 益阳市
  • 湖南省

  • 衡阳市
  • 湖南省

  • 邵阳市
  • 湖南省

  • 郴州市
  • 湖南省

  • 长沙市
  • 甘肃省

  • 临夏回族自治州
  • 甘肃省

  • 兰州市
  • 甘肃省

  • 嘉峪关市
  • 甘肃省

  • 天水市
  • 甘肃省

  • 定西市
  • 甘肃省

  • 平凉市
  • 甘肃省

  • 庆阳市
  • 甘肃省

  • 张掖市
  • 甘肃省

  • 武威市
  • 甘肃省

  • 甘南藏族自治州
  • 甘肃省

  • 白银市
  • 甘肃省

  • 酒泉市
  • 甘肃省

  • 金昌市
  • 甘肃省

  • 陇南市
  • 福建省

  • 三明市
  • 福建省

  • 南平市
  • 福建省

  • 厦门市
  • 福建省

  • 宁德市
  • 福建省

  • 泉州市
  • 福建省

  • 漳州市
  • 福建省

  • 福州市
  • 福建省

  • 莆田市
  • 福建省

  • 龙岩市
  • 西藏自治区

  • 山南市
  • 西藏自治区

  • 拉萨市
  • 西藏自治区

  • 日喀则市
  • 西藏自治区

  • 昌都市
  • 西藏自治区

  • 林芝市
  • 西藏自治区

  • 那曲市
  • 西藏自治区

  • 阿里地区
  • 贵州省

  • 六盘水市
  • 贵州省

  • 安顺市
  • 贵州省

  • 毕节市
  • 贵州省

  • 贵阳市
  • 贵州省

  • 遵义市
  • 贵州省

  • 铜仁市
  • 贵州省

  • 黔东南苗族侗族自治州
  • 贵州省

  • 黔南布依族苗族自治州
  • 贵州省

  • 黔西南布依族苗族自治州
  • 辽宁省

  • 丹东市
  • 辽宁省

  • 大连市
  • 辽宁省

  • 抚顺市
  • 辽宁省

  • 朝阳市
  • 辽宁省

  • 本溪市
  • 辽宁省

  • 沈阳市
  • 辽宁省

  • 盘锦市
  • 辽宁省

  • 营口市
  • 辽宁省

  • 葫芦岛市
  • 辽宁省

  • 辽阳市
  • 辽宁省

  • 铁岭市
  • 辽宁省

  • 锦州市
  • 辽宁省

  • 阜新市
  • 辽宁省

  • 鞍山市
  • 重庆市

  • 重庆市

  • 市辖区
  • 陕西省

  • 咸阳市
  • 陕西省

  • 商洛市
  • 陕西省

  • 安康市
  • 陕西省

  • 宝鸡市
  • 陕西省

  • 延安市
  • 陕西省

  • 榆林市
  • 陕西省

  • 汉中市
  • 陕西省

  • 渭南市
  • 陕西省

  • 西安市
  • 陕西省

  • 铜川市
  • 青海省

  • 果洛藏族自治州
  • 青海省

  • 海东市
  • 青海省

  • 海北藏族自治州
  • 青海省

  • 海南藏族自治州
  • 青海省

  • 海西蒙古族藏族自治州
  • 青海省

  • 玉树藏族自治州
  • 青海省

  • 西宁市
  • 青海省

  • 黄南藏族自治州
  • 黑龙江省

  • 七台河市
  • 黑龙江省

  • 伊春市
  • 黑龙江省

  • 佳木斯市
  • 黑龙江省

  • 双鸭山市
  • 黑龙江省

  • 哈尔滨市
  • 黑龙江省

  • 大兴安岭地区
  • 黑龙江省

  • 大庆市
  • 黑龙江省

  • 牡丹江市
  • 黑龙江省

  • 绥化市
  • 黑龙江省

  • 鸡西市
  • 黑龙江省

  • 鹤岗市
  • 黑龙江省

  • 黑河市
  • 黑龙江省

  • 齐齐哈尔市