我如何计算JavaScript对象的属性?
假设我在JavaScript中有以下对象:
var object = { "key1": "value1", "key2": "value2", "key3": "value3" };
如何找出对象中存在多less个值?
没有简单的答案,因为Object
中的每个对象都来自于Object
,它自动包含了许多属性,所获取的属性的确切集合取决于特定的解释器以及在您之前执行的代码。 所以,你不得不把你所定义的那些与你“免费”的那些分开。
这里有一个方法:
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");
第二行显示其他代码如何向所有Object
派生项添加属性。 如果在循环中删除hasOwnProperty()
检查,则属性计数将至less为4.在除此代码之外的其他JavaScript的页面上,如果其他代码也修改了Object
原型,则该页面可能会高于4。
你可以使用这个简单的代码来做到这一点:
Object.keys(myObject).length
使用下划线库,非常有用: _.keys(obj).length
. _.keys(obj).length
。
var miobj = [ {"padreid":"0", "sw":"0", "dtip":"UNO", "datos":[]}, {"padreid":"1", "sw":"0", "dtip":"DOS", "datos":[]} ]; alert(miobj.length) //=== 2
但
alert(miobj[0].length) //=== undefined
这个function非常好
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
您可以迭代对象以获取键或值:
function numKeys(obj) { var count = 0; for(var prop in obj) { count++; } return count; }
它看起来像一个“拼写错误”,但只是想指出,你的例子是无效的语法,应该是
var object = {"key1":"value1","key2":"value2","key3":"value3"};
这个函数使用Mozilla的__count__
属性,因为它比迭代每个属性的速度快。
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发生错误,加上一些其他的不便之处。 你不应该使用它 :(也许如果可以添加一个私有方法而不是公共属性函数,这可以,但是现在没有时间了)。 社区维基
不使用:
即使JavaScript的对象默认没有计数function,类很容易扩展,可以自己添加:
Object.prototype.count = function () { var count = 0; for(var prop in this) { if(this.hasOwnProperty(prop)) count = count + 1; } return count; }
所以之后可以执行
var object = {'key1': 'val1', 'key2':'val2', 'key3':'val3'}; console.log(object.count()); // 3
总之,如果你想在对象中计数function,你需要复制代码块1中的代码,并在执行时间内(在调用计数之前)将其粘贴。
让我知道如果这对你有用!
问候,佩德罗
对于那些将阅读这个问题/答案的人来说,下面是一个Dictionary集合的JavaScript实现,它和.NET的一个function非常相似: JavaScript Dictionary
虽然这不是一个“真正的对象”,但你总是可以这样做:
var foo = [ {Key1: "key1"}, {Key2: "key2"}, {Key3: "key3"} ]; alert(foo.length); // === 3