Javascript对象/数组填充问题

时间:2011-01-18 01:39:08

标签: javascript arrays javascript-objects

之间是否存在差异:

 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"
        };

编辑:

我会重新说出这个问题: 如何动态填充哈希? 我不能做像样品这样的东西.TB10152254-003因为我TB10152254-003是动态的...所以,这甚至可能吗?

2 个答案:

答案 0 :(得分:2)

两者都可以工作,因为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"
        };

答案 1 :(得分:1)

是。在第二个示例示例中,您“滥用”了ArrayObject这一事实。不要这样做。

仅将Array用于数字索引值,并使用普通Objects用于有类型哈希表。

我建议您详细了解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来循环数组。在我链接的页面上也写了原因。