Javascript получить имя ключа объекта - программирование
Подтвердить что ты не робот

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(), хотя это не сработало.

4b9b3361

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

Итак,

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

Ответ 3

Измените alert(buttons[i].text); на alert(i);

Ответ 4

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

Ответ 5

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

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"

Ответ 6

Вот простой пример, который поможет вам получить имя ключа объекта.

var obj ={parts:{costPart:1000, salesPart: 2000}}; console.log(Object.keys(obj));

вывод будет "частями";

Ответ 7

Обновление ES6... хотя и фильтр, и карта могут нуждаться в настройке.

Object.entries(theObj) возвращает представление массива [[key, value],] объекта, с которым можно работать, используя методы массива Javascript,.each(),.any(),.forEach(),.filter(),.map(),.reduce() и т.д.

Экономит массу работы по итерации по частям объекта Object.keys(theObj) или Object.values() по отдельности.

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

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

        }
    },
    button3: {
        text: 'Cancel',
        onclick: function(){

        }
    }
}

list = Object.entries(buttons)
    .filter(([key, value]) => '${key}'[value] !== 'undefined' ) //has options
    .map(([key, value], idx) => '{${idx} {${key}: ${value}}}')
    
console.log(list)