Javascript получить имя ключа объекта



Как я могу получить имя ключа для следующего? Например, я хочу " button1 "и"button2"?



var buttons = {
button1: {
text: 'Close',
onclick: function(){

}
},
button2: {
text: 'Close2',
onclick: function(){

}
}
}

var i;
for(i in buttons){
if(buttons.hasOwnProperty(i)){
alert(buttons[i].text);
}
}


Я пробовал использовать .push() хотя это не сработало.

487   5  

5 ответов:

Это можно было бы лучше понять, если бы вы немного изменили формулировку:

var buttons = {
  foo: 'bar',
  fiz: 'buz'
};

for ( property in buttons ) {
  console.log( property ); // Outputs: foo, fiz or fiz, foo
}

обратите внимание, что вы повторяете свойства объекта, используя property как ссылка на каждый во время каждого последующего цикла.

MSDN говорит for ( variable in [object | array ] ) следующее:

перед каждой итерацией цикла переменной присваивается имя следующего свойства объекта или индекс следующего элемента массива. Затем вы можете использовать его в любом из операторы внутри цикла для ссылки на свойство объекта или элемент массива.

обратите внимание также, что порядок свойств объекта не является постоянным и может изменяться, в отличие от порядка индексов массива. Это может пригодиться.

ECMAscript edition 5 также предлагает вам аккуратные методы Object.keys() и Object.getOwnPropertyNames().

Так

Object.keys( buttons );  // ['button1', 'button2'];

изменить alert(buttons[i].text); до alert(i);

переменная i - Это ваше имя ключа.

при условии, что у вас есть доступ к прототипу, это может сработать. Я написал этот код для себя всего несколько минут назад; мне нужен был только один ключ за раз, поэтому это не эффективно для больших списков пар ключ:значение или для выплевывания нескольких имен ключей.

function key(int) {
    var j = -1;
    for(var i in this) {
        j++;
        if(j==int) {
            return i;
        } else {
            continue;
        }
    }
}
Object.prototype.key = key;

это пронумеровано, чтобы работать так же, как и массивы, чтобы сэкономить головные боли. В случае вашего кода:

buttons.key(0) // Should result in "button1"

Comments

    Ничего не найдено.