我有一个对象数组,每个对象都有一个唯一的ID,我希望将多个(有时数百个)扩展链接到由它的id链接的对象。
这是一个伪代码示例:
var objects = [
{id:15,name:"client John Doe"},
{id:28,name:"server"}
]
var extensions = [
28:[
{
name:"watch errors",
command: "tail -f error.log"
},
{
name:"clear errors",
command: "> error.log"
}
]
]
这不是有效的javascript,创建数字关联数组的最佳选择是什么?
答案 0 :(得分:1)
只需使用对象文字而不是数组:
var extensions = {
28: […]
};
您可以extensions[28]
(或extensions["28"]
)访问它。
答案 1 :(得分:0)
如果使用对象表示法,这应该有效。我还建议将28封在引号中。这有助于避免在没有数组索引时将其视为数组索引的混淆。
var objects = [
{id:15,name:"client John Doe"},
{id:28,name:"server"}
]
var extensions = {
"28":[
{
name:"watch errors",
command: "tail -f error.log"
},
{
name:"clear errors",
command: "> error.log"
}
]
}
然后,您可以将该属性视为extensions["28"][0]
,但不能extensions.28[0]
。
答案 2 :(得分:0)
您有两个主要选择:
使用对象
var extensions = {
28:[
{
name:"watch errors",
command: "tail -f error.log"
},
{
name:"clear errors",
command: "> error.log"
}
] };
console.log(extensions[28][0].name); // "watch errors"
请注意,您无法使用extensions.28
来访问此内容,您需要使用extensions[28]
。
使用稀疏数组
您在这里寻找的阵列是完全合法的......您无法将其指定为文字。
var extensions = [];
extensions[28] = [
{
name:"watch errors",
command: "tail -f error.log"
},
{
name:"clear errors",
command: "> error.log"
}
];
console.log(extensions[28][0].name); // "watch errors"
现在你有一个数组,其索引为28,索引0-27未定义。
现在,值得注意的是,很多人都讨厌javascript中的稀疏数组。此外,您需要小心迭代它们,访问长度等等。但它们是语言的有效部分,这是它们的一个用例。