假设我在JavaScript中具有以下对象:
var object = {
"key1": "value1",
"key2": "value2",
"key3": "value3"
};
我如何找出对象中存在多少个值?
没有简单的答案,因为Object
JavaScript的每个对象都是从中自动派生的,而这些属性的确切集合取决于特定的解释器以及在您之前执行的代码。因此,您必须以某种方式将定义的内容与“免费”获得的内容分开。
这是一种方法:
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 。
您可以使用以下简单代码来做到这一点:
Object.keys(myObject).length
使用下划线库,非常有用:_.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
__count__
如果可用,此函数将利用Mozilla的属性,因为它比遍历每个属性的速度更快。
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
结论是,如果要在对象中进行计数功能,则需要从代码块1复制代码,并在执行时间的早期(在调用count之前)粘贴它。
让我知道这是否适合您!
佩德罗
对于那些将阅读此问题/答案的人,这是Dictionary集合的JavaScript实现,与.NET的功能非常相似:JavaScript字典
尽管它不是“真实对象”,但您始终可以执行以下操作:
var foo = [
{Key1: "key1"},
{Key2: "key2"},
{Key3: "key3"}
];
alert(foo.length); // === 3
本文地址:http://javascript.askforanswer.com/ruhejisuanjavascriptduixiangdeshuxingzhongfu.html
文章标签:javascript , object
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
文章标签:javascript , object
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!