假设我在 JavaScript 中有以下对象:
var object = {
"key1": "value1",
"key2": "value2",
"key3": "value3"
};
我如何找出对象中存在多少个值?
假设我在 JavaScript 中有以下对象:
var object = {
"key1": "value1",
"key2": "value2",
"key3": "value3"
};
我如何找出对象中存在多少个值?
Object.keys(myObject).length
没有简单的答案,因为每个JavaScript对象都继承自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()
检查,则属性计数至少会增加到4个。在一个包含除此代码之外的其他JavaScript的页面上,如果该其他代码也修改Object
原型,则它可能会更高于4个。使用非常实用的underscore库:_.keys(obj).length
可以获取对象的键值对数量。
您可以迭代对象以获取键或值:
function numKeys(obj)
{
var count = 0;
for(var prop in obj)
{
count++;
}
return count;
}
看起来像是“拼写错误”,但是我想指出你的示例代码存在无效语法,应该改为:
var object = {"key1":"value1","key2":"value2","key3":"value3"};
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
如果可用,此函数将利用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;
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
虽然它不是一个“真正的对象”,但你总可以像这样做:
var foo = [
{Key1: "key1"},
{Key2: "key2"},
{Key3: "key3"}
];
alert(foo.length); // === 3
Object.keys(myObject).length
,详见我的帖子。 - deadrunk