Javascript - 数字关联数组替代方案

时间:2015-04-27 21:13:53

标签: javascript arrays

我有一个对象数组,每个对象都有一个唯一的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,创建数字关联数组的最佳选择是什么?

3 个答案:

答案 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中的稀疏数组。此外,您需要小心迭代它们,访问长度等等。但它们是语言的有效部分,这是它们的一个用例。