数字作为javascript对象的属性
因此,我在创建报告时遇到了一种情况,希望在javascript中使用这样的结构:数字作为javascript对象的属性,javascript,Javascript,因此,我在创建报告时遇到了一种情况,希望在javascript中使用这样的结构: data[2015][2] = { property: value, property2: value }; 我不喜欢创建一个数组,因为我觉得用一个2015元素的数组来做我最近几年才有的东西是一种浪费,所以我尝试了.toString()并将其添加为属性,但这不起作用(我知道在.net等语言中数字不能作为属性名称,但不确定javascript是否是该语言的新成员). 最后,我只为年份加了一个“y”,为月
data[2015][2] = {
property: value,
property2: value
};
我不喜欢创建一个数组,因为我觉得用一个2015元素的数组来做我最近几年才有的东西是一种浪费,所以我尝试了.toString()并将其添加为属性,但这不起作用(我知道在.net等语言中数字不能作为属性名称,但不确定javascript是否是该语言的新成员). 最后,我只为年份加了一个“y”,为月份加了一个“m”,效果很好,但我的问题是,有没有更好的方法?我是不是对一个2015元素数组充满了未定义的元素心存疑虑?你可以使用对象而不是数组。您可以使用数字作为键,只要它们是字符串。因此,根据您的布局,您可以执行以下操作:
data = {
"2015": [
"array_elem_0",
"array_elem_1",
{
"property": value,
"property2": value
}
]
}
然后,当您需要索引到对象时,请使用
data["2015"] ...
您使用的语法对数组或对象都完全有效。Javascript允许使用数字作为属性名,但它会自动将其转换为字符串(您通常不会注意到)。您只需将变量初始化为对象而不是数组:
var data = {};
data[2015] = {};
data[2015][2] = ...
要证明数据
实际上不是数组,可以尝试检查其长度:
console.log(data.length); // undefined
正如我提到的,数字会自动转换为字符串。以下所有数据都指向相同的数据:
data[2015][2];
data["2015"]["2"];
data["20" + "15"][1+1];
旁注:
传统上,您甚至可以使用数组,而不必担心内存问题,因为javascript数组传统上是作为稀疏数组实现的。但现代浏览器可能会将某些数组优化为实际数组,因此如果您真的想节省内存,请使用对象。虽然这里已经有两个很好的答案,但如果您觉得使用包含许多未填充元素的数组“偏执”,我想特别回答您的问题 JS数组很棘手,因为它们可能显示为“线性列表”和“字典”。如果将它们用作“字典”,则实际上使用的是JS
Object
properties。所以你在混合内容
试试这个:
var a = [];
a[10] = "the entry";
console.log("A seems to have a length of: " + a.length);
console.log ("Contents of a:");
for (var key in a) {
console.log("- key " + key + " has: " + a[key]);
}
结果:
"A seems to have a length of: 11"
"Contents of a:"
"- key 10 has: the entry"
实际上只存储了一个元素。这表明length
只是一个信息。如果数组被视为整数寻址的元素链,则它是为了保持数组一致而设置的上边框。这里,长度
与“分配的内存大小”无关。没有“空的存储位置”
对于一些后续问题,您也可以尝试以下更改:
var a = [];
a[5] = "the earlier entry";
a["the_key"] = "disturbing";
a["2015"] = "Top";
a[10] = "the entry";
console.log("A seems to have a length of: " + a.length);
console.log ("Contents of a:");
for (var key in a) {
console.log("- key " + key + " has: " + a[key]);
}
新结果:
"A seems to have a length of: 2016"
"Contents of a:"
"- key 5 has: the earlier entry"
"- key 10 has: the entry"
"- key 2015 has: Top"
"- key the_key has: disturbing"
您始终可以使用数组
上下文以及对象
上下文
这会产生一些后果,例如如何循环数组(这已经是一个巨大的讨论,jQuery的。each()
增加了一些问题:-))
使用经典的for
循环,必须检查元素是否未定义。(首先取下上述键“2015”)
(变量i=0;i)的
数组不一定像您认为的JavaScript中那样工作。您可以使用数字(将转换为字符串)作为属性名,但您应该首先初始化数组:data[2015]=[]
所有的答案和评论都非常有用……感谢大家帮助理解javascript数组!这里没有JSON对象。JSON是一个字符串。您还应该使用:
定义属性。请注意数据[2015]
也适用于上述对象。试试看。这个答案非常通俗,对我理解js中的数组有很大帮助。感谢发布!感谢您的反馈-很高兴提供帮助:-)
for (var i=0; i<a.length; i++) {
console.log("at i=" + i + ": " + a[i]);
}
"at i=0: undefined"
"at i=1: undefined"
"at i=2: undefined"
"at i=3: undefined"
"at i=4: undefined"
"at i=5: the earlier entry" <<<
"at i=6: undefined"
"at i=7: undefined"
"at i=8: undefined"
"at i=9: undefined"
"at i=10: the entry" <<<