0

我这样调用一个函数:

update_insert('information',{
    element_id: 1,
    type: 'menu',
    info: 'Hi how are ya?',
    new_window: ''
});

功能是:

function update_insert(table,data){
    alert(data.length);
}

我试图获取插入函数的键的数量,并最终通过循环动态地获取键的名称。我怎样才能做到这一点?

4

6 回答 6

4

对象不像 JavaScript 中的数组那样具有 .length 属性。您需要使用一个函数来计算对象中的项目数:

getObjectLength = function(obj) {

    var size = 0, key;

    for (key in obj) {
        if (obj.hasOwnProperty(key))
            size++;
    }

    return size;
}

编辑:

并从对象中获取密钥:

getObjectKeys = function(obj) {

    var keys = [];

    for (var key in obj) {
        keys.push(key);
    }

    return keys;
}
于 2012-05-17T13:56:43.630 回答
1

您可以使用以下功能获取密钥(在旧浏览器中可以安全使用)...

var getObjectKeys = function(obj) {

    if (Object.keys && typeof Object.keys == "function") {
        return Object.keys(obj);
    }

    var prop, keys = [];

    for (prop in obj) {
        if (obj.hasOwnProperty(prop)) {
            keys.push(prop);
        }
    }

    return keys;
}

js小提琴

或者,使用和使用旧浏览器Object.keys()的等效项。[shim][2]

您可以检查length返回的属性Array以确定键的数量。


如果您想挖掘原型链上的所有可枚举属性,您可以使用...

var getObjectKeysIncludingInherited = function(obj) {
    var keys = [],
        i = 0;

    for (keys[i++] in obj);

    return keys;
}

js小提琴


或者,您可能真的想使用length对象的属性来执行此操作,但请不要。增加原生 JavaScript 对象被认为有些危险,而且有点令人困惑(Objects 没有length属性,但Arrays 有)并且它在旧浏览器中不起作用......

Object.defineProperty(Object.prototype, "length", {
    get: function() {
        return Object.keys(this).length;
    }        
});

js小提琴

于 2012-05-17T13:56:33.563 回答
0

大概是这样的吧?

function update_insert(table,data){
    var dataLength = 0, keys = [];

    for(prop in data) {
        if(data.hasOwnProperty(prop)) {
            dataLength++;
            keys.push(prop);
        }
    }
}

数组实际上是具有自定义length属性(和其他一些东西:P)的对象,因此并非所有对象都具有length属性。

于 2012-05-17T13:57:42.110 回答
0
var names = new Array();

for(name in data)
{
  if(data.hasOwnProperty(name))
  {
    names.push(name); 
  }
}

names.length - will give you what you need.
于 2012-05-17T13:57:58.010 回答
0
var keys = [];
for(var k in data) {
  if(Object.prototype.hasOwnProperty(data, k)) {
    keys.push(data[k]);
  }
}
k.length //size of keys
于 2012-05-17T13:58:09.433 回答
0

如果您是 jQuery 粉丝或潜在用户:

var size = 0;

$.each(obj, function(key, value) {
    alert('key = ' + key);
    alert('value = ' + value);
    size++;
});

alert(size);
于 2012-05-17T14:01:09.483 回答