将项添加到JSON对象中的列表的最佳方法?

时间:2011-09-04 04:01:06

标签: javascript json

我正在研究JavaScript,我有这个JSON对象:

var obj ={"name" : "objName",
    "dynamicList" :[]};

然后我将一些项目添加到我的列表中:

obj.dynamicList["someStringID"] = {"watever"};

重要的是我使用字符串作为列表中每个项目的索引器(我不知道这可以在最近之前完成)。

我现在唯一的问题是每当我要求obj.dynamicList.lenght我得到0时,我会手动设置正确的号码...我想知道是否有更好的方法将项目添加到我的列表中?

谢谢!

4 个答案:

答案 0 :(得分:2)

在Javascript中,字符串索引实际上不是索引。它实际上是数组对象的一个​​属性。您可以使用字符串索引设置和获取值,但它实际上是一个包含某些属性的空数组。不仅.length,而且.sort(),。splice()和其他数组函数都不起作用。如果需要使用数组函数,我会使用数字作为索引,使其成为数组中的真实项目。

如果必须使用字符串作为索引,则不能依赖.length函数。如果在版本9之前不需要支持IE,则@ strimp099建议的Object.keys应该有效。或者你可能必须创建函数来计算属性的数量,例如:

function len(obj) {
    var attrCount = 0;
    for(var k in obj) {
        attrCount++;
    }
    return attrCount;
}

然后致电

len(obj.dynamicList);

答案 1 :(得分:1)

要做到这一点"正确的方式,"你必须使obj.dynamicList成为一个对象而不是一个数组;使用{}代替[]来设置初始值。

答案 2 :(得分:1)

使用以下命令查找dynamicList对象的长度:

Object.keys(obj.dynamicList).length

答案 3 :(得分:0)

How to efficiently count the number of keys/properties of an object in JavaScript?

dynamiclist是一个对象,长度不是您期望从数组中获取的长度属性。