How do I count a JavaScript object's attributes?
假设我在javascript中有以下对象:
1 2 3 4 5 | var object = { "key1":"value1", "key2":"value2", "key3":"value3" }; |
如何确定对象中存在多少值?
型
您可以通过使用以下简单代码来实现这一点:
1 | Object.keys(myObject).length |
型
没有简单的答案,因为JavaScript中的每个对象都从—派生的
有一种方法:
1 2 3 4 5 6 7 8 9 10 | var foo = {"key1":"value1","key2":"value2","key3":"value3"}; Object.prototype.foobie = 'bletch'; // add property to foo that won't be counted var count = 0; for (var k in foo) { if (foo.hasOwnProperty(k)) { ++count; } } alert("Found" + count +" properties specific to foo"); |
第二行显示了其他代码如何向所有
Use underscore library, very useful:
1 2 3 4 5 | var miobj = [ {"padreid":"0","sw":"0","dtip":"UNO","datos":[]}, {"padreid":"1","sw":"0","dtip":"DOS","datos":[]} ]; alert(miobj.length) //=== 2 |
。
但是
1 | alert(miobj[0].length) //=== undefined |
这个功能很好
1 2 3 4 5 6 7 8 9 10 11 | Object.prototype.count = function () { var count = 0; for(var prop in this) { if(this.hasOwnProperty(prop)) count = count + 1; } return count; } alert(miobj.count()) // === 2 alert(miobj[0].count()) // === 4 |
。
型
可以迭代对象以获取键或值:
1 2 3 4 5 6 7 8 9 | function numKeys(obj) { var count = 0; for(var prop in obj) { count++; } return count; } |
它看起来像是一个"拼写错误",但只想指出您的示例是无效的语法,应该是be
1 | var object = {"key1":"value1","key2":"value2","key3":"value3"}; |
。
型
此函数使用Mozilla的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | function countProperties(obj) { var count ="__count__", hasOwnProp = Object.prototype.hasOwnProperty; if (typeof obj[count] ==="number" && !hasOwnProp.call(obj, count)) { return obj[count]; } count = 0; for (var prop in obj) { if (hasOwnProp.call(obj, prop)) { count++; } } return count; }; countProperties({ "1": 2, "3": 4, "5": 6 }) === 3; |
。
型
编辑:这将发生jquery错误,以及其他一些不便。您不应该使用它:(也许如果可以添加privaate方法而不是公共属性函数,这是可以的,但现在没有时间)。社区维基
请勿使用:
尽管默认情况下javascript的对象没有count函数,但是类很容易扩展,可以自己添加:
1 2 3 4 5 6 7 8 | Object.prototype.count = function () { var count = 0; for(var prop in this) { if(this.hasOwnProperty(prop)) count = count + 1; } return count; } |
这样在那之后你就可以执行
1 2 | var object = {'key1': 'val1', 'key2':'val2', 'key3':'val3'}; console.log(object.count()); // 3 |
。
最后,如果希望在对象中具有计数功能,则需要从代码块1复制代码,并在执行时间早期(在调用计数之前)将其粘贴。
如果对你有用的话,告诉我!
当做,佩德罗
For those which will read this question/answers, here is a JavaScript implementation of Dictionary collection very similar as functionality as .NET one: JavaScript Dictionary
型
虽然它不是一个"真正的物体",但你可以一直这样做:
[cc lang="javascript"]var foo = [
{Key1:"key1