If you're seeing this message, it means we're having trouble loading external resources on our website.

如果你被网页过滤器挡住,请确保域名*.kastatic.org*.kasandbox.org 没有被阻止.

主要内容

存储和更新列

在编程时,变量给了我们记忆数据和命名它们的方法,以便我们稍后访问甚至改变它。通常,数据是单独的一条信息,例如一个数字或一个字符串。
有时数据是一个相关信息的 集合 ,就像一列高分或学生姓名。要存储那样的集合,电脑程序可以使用 列表 数据类型,又称 数组序列

初始化列表

为了开始使用列表,我们需要初始化一个变量来存储一个列表。
在 JavaScript 语言中,我们称呼列表“数组”,并使用方括号存储它们:
var myChores = [ ];
那个列表完全是空白的(没有杂务,爽!),因为括号中没有值。
下面是一个以 5 个数字开始的列表:
var lottoNumbers = [8, 9, 32, 37, 39];
注意我们用逗号分隔每个值。
我们还可以存储一个列表的字符串,就像这个示例:
var rainbowColors = ["red", "orange", "yellow", "green", "blue", "indigo", "violet"];
在这里语法非常重要:我们使用双引号环绕每个值,因为每个值都是一个字符串,但我们把逗号放在引号 外面 。英语语法规则在 JavaScript 中不管用!

访问列表值

现在我们知道如何存储一个列表,我们需要找到一个方法来检索列表中的每个项目。
第一步是找出想要的项目的“索引”。计算机给列表里的每一项都分配了一个索引,以便它可以追踪它真实内存里那一项存储在了哪里。
在 JavaScript 语言中,列表中的第一个项目位于索引0, 在索引1。
这里是 rainbowColors 数组的指数:
0123456
"红""橘""黄""绿""蓝""靛青""紫"
现在我们可以使用“括号符号”来引用数组中的任何项目:
var firstColor = rainbowColors[0];
var lastColor = rainbowColors[6];
变量 firstColor 存储 "红" ,且变量 lastColor 存储 "蓝"。
列表索引是程序员经常犯”差一错误“ (off-by-one errors)的地方:指你的代码几乎是正确的,除了一个数字要么太高,要么太低。无论何时你在用列表编程时,记住索引是如何在那种语言中工作的并再次检查你的索引。
🎅🏽"你在创建一个列表,检查两次!" 🎶
测验你的理解
思考这个列表的数字:
var lottoNumbers = [8, 9, 32, 37, 39];
鉴于JavaScript中的数组为 0-索引,在lottonNumber[1]中存储着什么数字?
  • 你的答案是
  • 一个整数,例如 6
lottoNumbers[4]中存储着什么数字?
  • 你的答案是
  • 一个整数,例如 6

更新列表值

只要我们知道它的索引,我们就能在一个列表上更新一个项目。
在 JavaScript中,我们用括号符号来更新一个值。比如,让我们基于更现代化的理解来更新彩虹的颜色。
rainbowColors[4] = "cyan";
rainbowColors[5] = "blue"';
现在,rainbowColors数组会存储"红", "橘", "黄", "绿", "青", "蓝", 和· "紫"。
✏️ 下面的程序存储,显示,并更新一列我喜欢的食物。依你的喜好改变程序,并尝试延长列表。
📝 查看类似代码: App Lab | Snap | Python

列表操作

除了只更新一个单独的值以外,我们有很多,很多种方法修改一个列表,而编程语言往往提供列表修改的内部程序。让我们尝试其中的一些吧。

附加一个项目

我们经常希望在一个列表里“附加”一个项目,这意味着在其结尾添加一个新项目。
在 JavaScript 中,我们可以在一个数组中调用 push() 方法,并将新的项目作为参数。
记得我从早些时候留下的空 myChores 数组么?那么...
myChores.push("Wash the dishes");
不那么空了!现在列表存储一个单一项目:“刷盘子”。我们可以按需要接着添加项目,列表每次都会变得更长。
myChores.push("Do laundry");
myChores.push("Mow the lawn");
列表现在有3个项目(于我十分不幸):
indexitem
0"Wash the dishes"
1"Do laundry"
2"Cut the lawn"

插入一个项目

有时我们想在列表靠前一点添加一个项目,例如在开头或在两个已经存在的项目之间。
在 JavaScript里这样做的一个方法是用 splice() 方法。
myChores.splice(0, 0, "Scare ants away");
拼接方法占用3个参数:应该插入项目的地方的索引,除去的项目的数字,和插入的项目。在以上的例子中, 索引是0,需要移除的数字是0,所以那条代码会在最开头的位置插入一个项目,并把所有后面项目挪移一个索引。
索引项目
0"吓跑蚂蚁"
1"刷盘子"
2"洗衣服"
3"除草"
myChores 数组现在储存了4个值。
我们还可以在列表中间插入一个项目:
myChores.splice(2, 0, "Write this article");
在这种情况下,代码在索引2插入新项目,并挪动后面的项目。
索引项目
0"吓跑蚂蚁"
1"刷盘子"
2"写这篇文章"
3"洗衣服"
4"除草"
数组现在储存了5个值。注意头两个项目保持在同样的索引中,因为这个拼接操作根本不会影响它们。
你有没有因记住实际上如何运用像splice()这样的方法而紧张?不必担心,你永远能查询文件和例子。程序员不用记住所有过程和参数的细节,更重要的是我们理解所存在的选项的范围,且知道 如何 找到更多细节。

移除一个项目

当然,我们也可以从列表中移除项目。
在 JavaScript 中,删除项目的一种方式是用相同的splice() 方法。 splice() 的第二个参数指定要删除的项目的数字,所以如果我们指定一个非零数字,并且 提供第三个参数,我们就可以删除一个项目。
myChores.splice(4, 1);
那一行代码明确指出了索引4和需要被移除的数字为1,所以它移除一个在索引4的单独项目。由于数组只有5个项目长,最后一个项目被移除,”除草“。
索引项目
0"吓跑蚂蚁"
1"刷盘子"
2"写这篇文章"
3"洗衣服"
我们还能在列表中间移除项目。我几乎快写完这篇文章了,所以我可以移除这项,在索引2。
myChores.splice(2, 1);
索引项目
0"吓跑蚂蚁"
1"刷盘子"
3"洗衣服"
现在我的杂务列表只有3个项目长了,更容易管理。
✏️你有在音乐网站上创建过歌单么?大多数网站给你在歌单里添加新歌的能力,到处转移歌曲,并删除歌曲。下方的程序是一个简单的,使用列表的歌单编辑器。尝试一下,用你喜欢的新歌来替换我过时的歌曲!
📝 查看相似代码: App Lab | Snap | Python

用伪代码编写的列表

很多语言列表使用的是括号符号,我们在伪编码中也这样用。
这个伪代码代表初始化一个包含3个项目的列表:
list ← [1, 2, 3]
同样,我们可以使用括号符号来访问和分配项目:
DISPLAY(list[1])
list[1] ← 55
⚠️在AP CSP 考试伪代码 和 JavaScript 代码之间有 很大 的区别:列表指数始于 1。上方的代码显示列表 第一个 项目,而不是第二个。
有一些编程语言使用基于1的索引,尤其是数学家中非常流行的,所以知道索引在任何语言或现在你使用的伪代码中如何工作十分重要。
鉴于这些差异,这里是存储和更新彩虹颜色列表的伪代码:
rainbowColors ← ["red", "orange", "yellow", "green", "blue", "indigo", "violet"]

firstColor ← rainbowColors[1]
lastColor ← rainbowColors[7]

rainbowColors[5] ← "cyan"
rainbowColors[6] ← "blue"

列表操作

在列表操作时,不同语言之间存在相当大的差异。
这是我们如何用伪代码代表附加一个项目:
APPEND(list, item)
这一过程在 列表 尾部添加 项目 ,给列表增加1的长度。
INSERT(list, i, item)
这个过程在基于1的索引i中插入项目,并将后面任何项目向右移动。列表的长度增加一。
REMOVE(list, i)
这个过程在基于1的索引i中移除项目,并将后面任何项目向左移动。列表的长度减少一。
我们可以像这样使用伪代码来重写 myChores 列表的操作:
myChores ← []

APPEND(myChores, "Wash the dishes")
APPEND(myChores, "Do laundry")
APPEND(myChores, "Mow the lawn")

INSERT(myChores, 1, "Scare ants away")
INSERT(myChores, 3, "Write this article")

REMOVE(myChores, 5)
REMOVE(myChores, 3)

想加入讨论吗?

尚无帖子。
你会英语吗?单击此处查看更多可汗学院英文版的讨论.