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