1

有没有区别:

 var samples = {
        "TB10152254-001": {
            folderno: "TB10152254",
            ordno: "001",
            startfootage: "",
            endfootage: "",
            tagout: "Y"
        },
        "TB10152254-002": {
            folderno: "TB10152254",
            ordno: "002",
            startfootage: "",
            endfootage: "",
            tagout: "Y"
        },

        "TB10152254-003": {
            folderno: "TB10152254",
            ordno: "003",
            startfootage: "",
            endfootage: "",
            tagout: "Y"
        }
    };

 var samples = new Array();
samples["TB10152254-001"]  = {
            folderno: "TB10152254",
            ordno: "001",
            startfootage: "",
            endfootage: "",
            tagout: "Y"};

samples["TB10152254-002"] = {
            folderno: "TB10152254",
            ordno: "002",
            startfootage: "",
            endfootage: "",
            tagout: "Y"
        };

samples["TB10152254-003"] =  {
            folderno: "TB10152254",
            ordno: "003",
            startfootage: "",
            endfootage: "",
            tagout: "Y"
        };

编辑:

我将重新表述这个问题:如何动态填充散列?我不能做像 samples.TB10152254-003 这样的事情,因为我 TB10152254-003 是动态的……那么,这可能吗?

4

2 回答 2

2

两者都可以工作,因为 Array 是一种对象。但是以这种方式使用 Array 并没有任何优势,并且当您使用for/in.

Object 将是用于命名属性的正确类型。仅将 Array 用于索引属性。


关于您的编辑,您可以使用方括号表示法以与数组相同的方式动态填充对象。

   // Create a new empty object. You an use "new Object()" if you wish
var samples = {};

  // Populate the "samples" object in the same way you would an Array.
samples["TB10152254-001"]  = {
            folderno: "TB10152254",
            ordno: "001",
            startfootage: "",
            endfootage: "",
            tagout: "Y"};

samples["TB10152254-002"] = {
            folderno: "TB10152254",
            ordno: "002",
            startfootage: "",
            endfootage: "",
            tagout: "Y"
        };

samples["TB10152254-003"] =  {
            folderno: "TB10152254",
            ordno: "003",
            startfootage: "",
            endfootage: "",
            tagout: "Y"
        };
于 2011-01-18T01:42:22.963 回答
1

是的。在第二个示例中,您“滥用”了 an Arrayas 也是Object. 不要这样做。

仅将Arrays 用于数字索引值,将 plainObjects用于有点哈希表。

我建议阅读更多关于ArraysObjects 的信息。

在 JavaScript 中,基本上一切都是对象。还有数组。但是该Array对象提供了处理数字索引数据的附加方法。

当您samples.length在第二个示例中进行操作时,您可能会最好地看到差异。普通对象没有属性length,数组有。对于数组,它告诉您存储在数组中的元素数量。现在,当您调用samples.length第二个示例时,您将得到0因为数组实际上不包含任何元素。

可能导致更混乱的是,您有两种访问对象属性的可能性:“点表示法”object.property和“数组表示法”,object['property']. 但这是对象而非数组的功能。

当您生成键或将属性名称存储在变量中时,数组表示法会派上用场。

更新:

如所写,您可以使用数组表示法来动态创建属性,例如:

var samples = {};

for(var i = 0; i < 4; i++) {
    samples["TB10152254-" + i] = {
        folderno: "TB10152254",
        ordno: i,
        startfootage: "",
        endfootage: "",
        tagout: "Y"
    }
}

如果要访问属性,则必须使用for...in循环来遍历键:

for(var key in samples) {
    var value = samples[key];
}

但请注意:永远不要使用for...in循环数组。在我链接到的页面上也写了为什么。

于 2011-01-18T01:43:40.950 回答