计数具有'仅限非数字索引'没有for在循环中
Count length of Array having 'non numeric indexes only' without for in loop
如果索引是非数字的,则数组定义长度=0。
我遇到了这种获取长度的实现,但我仍然害怕将for用于数组的循环中。循环中的大多数地方都被指示为"不良做法"。参见此处
这样实施可以吗?
有人能提供替代解决方案吗(没有for in loop)?
有for循环的例子吗
我使用了hasOwnProperty(..)
方法来避免Array.prototype
的性质。
Array.prototype.global = 1;
var arr = [];
arr['first'] = 1;
arr['second'] = 2;
console.log(arr.length); //0
var length = 0;
for(index in arr){
if(arr.hasOwnProperty(index)) {length++;}
}
console.log(length); //3
在您的示例中,不再使用数组作为数组。JS中的数组(严格来说)只是一堆这样的东西:
['a', 'b', 'c']
您所做的是开始使用空数组作为对象。。[]simple通过字符串/变量访问属性。。。所以
var obj = {test: 'blah'}
obj['test'] //is 'blah'
obj.test //is also blah
通常,当您要通过变量访问属性或方法时,或者如果属性或方法不是"安全"的,则使用[]表示法。。例如"int"。
因此,将您所拥有的内容更改为对象,然后使用"for in"循环遍历关键帧。是的,你仍然需要检查每一个,看看它是否有OwnProperty(或者使用jquery/下划线"each"),但至少你会使用正确的工具来完成这项工作:)或者,如果你只想要键的计数,underscore.js有一个很好的小_.keys方法。。所以_.keys(obj).length会给出键的数量。很确定这只是本地密钥,而不是原型密钥。。
编辑:作为一个重读的答案,希望能更好地切中要害,据我所知,JS中没有任何属性可以简单地获得键的计数。如果它只是你正在处理的一个特定的东西,而不是"所有的对象",你可以做这样的事情。。
var specialObject = function () {this.keys = 0;};
specialObject.prototype.set = function (key, val) {
if(!this[key]) {
this.keys++;
}
this[key] = val;
};
var so = new specialObject();
so.set('test', 'blah');
so.keys //would be 1
so.test //would be 'blah'
然后总是使用"set"。您可能想要制作一个"unset"方法,也可能是一个"get"方法。
希望这一切都有意义。。这有点乱。
- 有没有写100以上的索引的捷径
- 获取李有一个类而没有其他类的索引
- 使用Handlebars获取同级JSON数据,其中单个对象没有父索引键,但多个项有一个索引键
- 有没有办法得到引导3旋转木马的索引位置
- 列表框所选索引更改的原因没有启动
- 为什么 “/” 在节点.js中没有提供索引.html
- 在Javascript中,有没有一种方法可以用一个语句创建一个索引对象数组
- 下划线.js - OO:在索引处获取项目?有没有更好的JS库来做到这一点
- Gulp-inject说“没有什么可以注入索引.html”
- 多设备混合应用程序 - 有没有人让 android 的索引数据库插件工作
- 我知道如何获取 z 索引,但是有没有办法在页面上获取绝对 Z(数字,而不是 AUTO)
- 有没有办法从索引数据库中检索随机行
- “没有VBO绑定到启用的顶点属性索引0”试图在WebGL中绘制一个简单的纹理
- AngularJS md-tabs的更改索引完全没有影响
- 如果observableArray数组没有与Knockout JS匹配的索引,如何禁用
- 解析JSON数组中的数组与javascript没有索引
- 没有索引的Javascript数组拼接
- 连接没有索引0的JSON数组对象
- Js /如何获得数组值没有索引
- 如果在半径区域内没有索引,让GeoFire返回null