包含多个项目的JavaScript数组

时间:2014-11-10 00:48:03

标签: javascript arrays

我正在尝试创建一个包含多个字段的数组。

例如:

var person1 = {firstname:"Bob", lastname:"Smith", middlename:"happy"};

我遇到的问题是我想创建5000个变量,所以它会变成:

var person1 = {firstname:"Bob", lastname:"Smith", middlename:"happy"};
var person2 = {firstname:"John", lastname:"Jones", middlename:"Long"};
..
var person5000 = {firstname:"Jim", lastname:"Cook", middlename:"Shorty"};

我认为拥有5000行代码来声明变量是愚蠢的。 所以我希望能够在页面加载时声明变量,然后再将值分配给每个变量。

我试图使用以下代码执行此操作,但我猜我做错了什么。 (我正在将一些虚拟数据加载到变量中进行测试)

<!DOCTYPE html>
<html>
<body>

<script>
    var person = new Array (firstName:"", lastName:"", middleName:"");
    for (var i = 0; i < 5000; ++i) {
        person[i] = {firstName:"First"+i, lastName:"Last"+i, middlename:"Middle"+i};
    }


alert(person1["firstName"]); // should alert First1
alert(person6["lastname"]);  // should alert Last6


</script>

</body>
</html>

我希望稍后在我的代码中设置值使用: (我很确定这段代码应该可以工作,但由于我无法正确声明变量而无法测试它)

person1[firstname] = "Terry";  // should replace First1 with Terry

然后使用以下方式接收值:

alert(person1[firstname]);  // should alert Terry since it was changed

任何人都知道我的代码有什么问题,因为它没有返回值? 我猜我宣布变量错了?如果是这样,我该如何申报?

2 个答案:

答案 0 :(得分:2)

您似乎对Javascript中数组和对象之间的区别感到困惑。数组具有数字索引,对象具有命名属性。所以初始化

new Array(firstName:"", lastName:"", middleName:"");

毫无意义。更不用说,它不是有效的Javascript语法; property: value对只能用于对象文字,而不能用在参数列表中。如果使用new Array(...),则参数应该是单个数字,即要分配的数组的大小,或者是初始数组元素的列表(没有property:前缀。但是首选的方法是创建一个新数组只需使用[]字面值表示空数组;当您指定它时,它将根据需要增长。

创建数组时,不会为每个元素获取单独的变量。您可以使用array[n]表示法访问它们。

// Create an empty array
var person = [];
// Fill up the array
for (var i = 0; i < 5000; ++i) {
    person[i] = {firstName:"First"+i, lastName:"Last"+i, middlename:"Middle"+i};
}

// Access elements
alert(person[1].firstName);
alert(person[6].middleName);
// Change elements
person[1].firstName = "Terry";

答案 1 :(得分:1)

我相信这应该按照你的意图行事:

var person = new Array();
for (var i = 0; i < 5000; ++i) {
    person[i] = {firstName:"First"+i, lastName:"Last"+i, middleName:"Middle"+i};
}

alert(person[1]["firstName"]);
alert(person[6]["lastName"]);

正如其他人所指出的,person数组中充满了对象,而不是数组。您可以使用任一属性或associative array syntax