【问题标题】:Finding the number of keys in an object [duplicate]查找对象中的键数[重复]
【发布时间】:2011-10-07 02:33:39
【问题描述】:

可能重复:
How to efficiently count the number of keys/properties of an object in JavaScript?

var values = [{
    'SPO2': 222.00000,
    'VitalGroupID': 1152,
    'Temperature': 36.6666666666667,
    'DateTimeTaken': '/Date(1301494335000-0400)/',
    'UserID': 1,
    'Height': 182.88,
    'UserName': null,
    'BloodPressureDiastolic': 80,
    'Weight': 100909.090909091,
    'TemperatureMethod': 'Oral',
    'Resprate': null,
    'HeartRate': 111,
    'BloodPressurePosition': 'Standing',
    'VitalSite': 'Popliteal',
    'VitalID': 1135,
    'Laterality': 'Right',
    'HeartRateRegularity': 'Regular',
    'HeadCircumference': '',
    'BloodPressureSystolic': 120,
    'CuffSize': 'XL'
}];

for (i=0; i < values.length; i++) {
        alert(values.length) // gives me 2. 

如何找到我的对象有多少键?

【问题讨论】:

  • 两件事:1) 你为什么在循环values.length 的同时还提醒values.length? 2)我发誓values.length不会给你2。
  • 关于@BoltClock 的评论,alert(values.length); gives: 1。而且,顺便说一句,根据我自己的训练,氧饱和动脉分压 (SPO2) 应该是一个高达 100 的百分比值(显然是百分比)。 222.00000 来自哪里?我不打算对抗,但我很好奇... =)

标签: javascript


【解决方案1】:
var value = {
    'SPO2': 222.00000,
    'VitalGroupID': 1152,
    'Temperature': 36.6666666666667,
    'DateTimeTaken': '/Date(1301494335000-0400)/',
    'UserID': 1,
    'Height': 182.88,
    'UserName': null,
    'BloodPressureDiastolic': 80,
    'Weight': 100909.090909091,
    'TemperatureMethod': 'Oral',
    'Resprate': null,
    'HeartRate': 111,
    'BloodPressurePosition': 'Standing',
    'VitalSite': 'Popliteal',
    'VitalID': 1135,
    'Laterality': 'Right',
    'HeartRateRegularity': 'Regular',
    'HeadCircumference': '',
    'BloodPressureSystolic': 120,
    'CuffSize': 'XL'
};

alert(Object.keys(value).length);

【讨论】:

  • 如果对象在数组中,我如何找到键的总数
【解决方案2】:

试试

Object.keys(values).length

见:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys

为了兼容性

if(!Object.keys) Object.keys = function(o){
 if (o !== Object(o))
      throw new TypeError('Object.keys called on non-object');
 var ret=[],p;
 for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.push(p);
 return ret;
}

或使用:

function numKeys(o){
var i=0;
for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)){ i++};
return i;
}

【讨论】:

  • 你应该归因于它的来源......
【解决方案3】:
function numKeys(o) {
   var res = 0;
   for (var k in o) {
       if (o.hasOwnProperty(k)) res++;
   }
   return res;
}

或者,在较新的浏览器中:

function numKeys(o) {
   return Object.keys(o).length;
}

在您的示例中,values 是一个包含一个元素的数组,因此您可以调用 numKeys(values[0]) 来查找。

【讨论】:

  • #2 应该是Object.keys(o).length
【解决方案4】:

您可以迭代并计算:

var i = 0;
for(var key in values[0]) if(values[0].hasOwnProperty(key)) i++;
// now i is amount

【讨论】:

  • 这将包括对象原型定义的属性
  • @phihag:你是对的,但无论如何你都不应该扩展Object.prototype
  • @pimvdb 确实不应该,但你应该进行防御性编程,以防你正在使用的库之一。
猜你喜欢
  • 2014-08-21
  • 1970-01-01
  • 2023-01-17
  • 1970-01-01
  • 2018-08-13
  • 2016-07-15
  • 2016-01-08
  • 1970-01-01
  • 2016-06-26
相关资源
最近更新 更多