如何计算 JavaScript 对象的属性?

假设我在 JavaScript 中有以下对象:

var object = {
"key1": "value1",
"key2": "value2",
"key3": "value3"
};

如何查明对象中存在多少个值?

274453 次浏览

您可以在对象上迭代以获得键或值:

function numKeys(obj)
{
var count = 0;
for(var prop in obj)
{
count++;
}
return count;
}

它看起来像一个“拼写错误”,但只是想指出,你的例子是无效的语法,应该是 < pre > < code > var object = {“ key1”: “ value1”,“ key2”: “ value2”,“ key3”: “ value3”} ;

这个问题没有简单的答案,因为在 JavaScript 中每个对象都是从 & mash; 派生出来的,它自动包含了许多属性,而你得到的属性的确切集合取决于特定的解释器和在你之前执行的代码。所以,你必须设法把你定义的那些和你“免费”得到的那些区分开来

这里有一个办法:

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()检查,则属性计数将至少达到4。在除了这段代码之外还有其他 JavaScript 代码的页面上,如果其他代码也修改了 Object原型,那么它可能高于4。

如果可以使用 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 默认的对象没有 count 函数,但是类是很容易扩展的,而且可以自己添加:

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

总之,如果希望在对象中使用 count 功能,则需要从代码块1复制代码,并在执行时间的早期(在调用 count 之前)粘贴它。

让我知道这是否适合你!

问候, 佩德罗

虽然它不是一个“真正的对象”,但是你总是可以这样做:

var foo = [
{Key1: "key1"},
{Key2: "key2"},
{Key3: "key3"}
];


alert(foo.length); // === 3

使用 下划线库,非常有用: _.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

这个函数非常好

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

您可以通过使用下面这个简单的代码来实现这一点:

Object.keys(myObject).length