我正在尝试创建一个包含多个字段的数组。
例如:
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
任何人都知道我的代码有什么问题,因为它没有返回值? 我猜我宣布变量错了?如果是这样,我该如何申报?
答案 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。