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;
}

jsFiddle

または、古いブラウザObject.keys()と同等のものを使用して使用します。[shim][2]

length返されたプロパティを確認してArray、キーの数を確認できます。


プロトタイプチェーン上のすべての列挙可能なプロパティを浚渫したい場合は、...を使用できます。

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

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

    return keys;
}

jsFiddle


または、オブジェクトのプロパティを使用してそれを実行したい場合もありますが、使用しないでください。ネイティブJavaScriptオブジェクトを拡張することはやや危険であると考えられており、混乱を招き(プロパティはありませんが、プロパティはあります)、古いブラウザでは機能しません...lengthObjectlengthArray

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

jsFiddle

于 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

あなたがjQueryのファンまたは潜在的なユーザーである場合:

var size = 0;

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

alert(size);
于 2012-05-17T14:01:09.483 に答える
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 に答える