Get*_*ree 98 javascript collections elements javascript-objects
有没有办法从某个地方获取javascript对象中的元素数量?(即恒定时间复杂度).
我找不到检索该信息的属性或方法.到目前为止,我只能想到在整个集合中进行迭代,但那是线性时间.
很奇怪,没有直接访问对象的大小,你不觉得.
编辑:
我说的是Object对象(一般不是对象):
var obj = new Object ;
Run Code Online (Sandbox Code Playgroud)
Chr*_*oph 148
虽然JS实现可能会在内部跟踪这样的值,但是没有标准的方法来实现它.
在过去,Mozilla的Javascript变种暴露了非标准__count__,但它已被1.8.5版本删除.
对于跨浏览器脚本编写,您必须明确迭代属性并检查hasOwnProperty():
function countProperties(obj) {
var count = 0;
for(var prop in obj) {
if(obj.hasOwnProperty(prop))
++count;
}
return count;
}
Run Code Online (Sandbox Code Playgroud)
在支持ECMAScript 5的情况下,这也可以写成(Kudos to Avi Flax)
function countProperties(obj) {
return Object.keys(obj).length;
}
Run Code Online (Sandbox Code Playgroud)
请记住,您还会错过不可枚举的属性(例如数组length).
如果你正在使用像jQuery,Prototype,Mootools这样的框架,那就是最新的炒作,检查它们是否带有自己的集合API,这可能是比使用本机JS对象更好的解决问题的方法.
小智 87
要在任何兼容ES5的环境中执行此操作
Object.keys(obj).length
Run Code Online (Sandbox Code Playgroud)
(此处的浏览器支持)
(此处的Doc.keys 上的文档,包括可以添加到非ECMA5浏览器的方法)
Ind*_*eff 11
如果您已在构建中使用jQuery,请执行以下操作:
$(yourObject).length
Run Code Online (Sandbox Code Playgroud)
它对我的对象很好用,我已经把jQuery作为一个依赖.
function count(){
var c= 0;
for(var p in this) if(this.hasOwnProperty(p))++c;
return c;
}
var O={a: 1, b: 2, c: 3};
count.call(O);
Run Code Online (Sandbox Code Playgroud)