我正在研究JavaScript,我有这个JSON对象:
var obj ={"name" : "objName",
"dynamicList" :[]};
然后我将一些项目添加到我的列表中:
obj.dynamicList["someStringID"] = {"watever"};
重要的是我使用字符串作为列表中每个项目的索引器(我不知道这可以在最近之前完成)。
我现在唯一的问题是每当我要求obj.dynamicList.lenght
我得到0
时,我会手动设置正确的号码...我想知道是否有更好的方法将项目添加到我的列表中?
谢谢!
答案 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是一个对象,长度不是您期望从数组中获取的长度属性。