Получение имени свойства объекта

Мне было интересно, есть ли какой-либо путь в JavaScript, чтобы пропустить такой объект.

for(var i in myObject) {
    // ...
}

Но получите имя каждого свойства, подобного этому.

for(var i in myObject) {
    separateObj[myObject[i].name] = myObject[i];
}

Я не могу найти ничего подобного в Google. Говорят, чтобы передать имена переменных с ними, но это не вариант того, чего я пытаюсь достичь.

Спасибо за любую помощь, которую вы можете предложить.

4b9b3361

Используйте Object.keys():

var keyNames = Object.keys(myObject);
for (var i in keyNames) {
     console.log(i);
}

Object.keys() дает вам массив имен свойств, принадлежащих входному объекту.

63
ответ дан 12 мая '14 в 19:55
источник

i - это имя.

for(var name in obj) {
    alert(name);
    var value = obj[name];
    alert(value);
}

Итак, вы можете сделать:

seperateObj[i] = myObject[i];
171
ответ дан 23 нояб. '10 в 23:01
источник

Отказ Я неправильно понял вопрос: "Могу ли я узнать имя свойства, к которому был привязан объект", но решил оставить ответ, поскольку некоторые люди могут оказаться здесь при поиске этого.


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

var obj = {a:1};
var a = {x: obj, y: obj}

Каким будет имя obj?

Вы уверены, что не хотите, чтобы имя свойства из цикла for?

for (var propName in obj) {
  console.log("Iterating through prop with name", propName, " its value is ", obj[propName])
}
13
ответ дан 23 нояб. '10 в 23:03
источник

Чтобы получить свойство объекта или "ключ массива" или "индекс массива" в зависимости от вашего родного языка... Используйте метод Object.keys().

Важно, это совместимо только с "Современными браузерами":

Итак, если ваш объект вызывается, myObject...

var c = 0;
for(c in myObject) {
    console.log(Object.keys(myObject[c]));
}

Walla! Это определенно будет работать в последнем firefox и ie11 и chrome...

Вот несколько документов на MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

3
ответ дан 01 мая '15 в 17:13
источник

для прямого доступа к объекту по позиции... как правило, полезный для propoerty [0]... поэтому он содержит информацию о дальнейшем... или в node.js 'require.cache [0]' для первого загруженного внешнего модуля и т.д. и т.д.

Object.keys(myObject) [0] Object.keys(myObject) [1] ... Object.keys(myObject) [n]

2
ответ дан 18 июля '14 в 3:43
источник

Когда вы делаете цикл for/in, который вы ставите первым, я является именем свойства. Таким образом, у вас есть имя свойства, я и доступ к значению, выполнив myObject [i].

0
ответ дан 23 нояб. '10 в 23:02
источник

В ES5

например. у вас есть такой объект:

var ELEMENTS = {
    STEP_ELEMENT: { ID: "0", imageName: "el_0.png" },
    GREEN_ELEMENT: { ID: "1", imageName: "el_1.png" },
    BLUE_ELEMENT: { ID: "2", imageName: "el_2.png" },
    ORANGE_ELEMENT: { ID: "3", imageName: "el_3.png" },
    PURPLE_ELEMENT: { ID: "4", imageName: "el_4.png" },
    YELLOW_ELEMENT: { ID: "5", imageName: "el_5.png" }
};

И теперь, если вы хотите иметь функцию, если вы передаете "0" в качестве параметра - чтобы получить "STEP_ELEMENT", если "2", чтобы получить "BLUE_ELEMENT" и т.д. для

function(elementId) {
    var element = null;

    Object.keys(ELEMENTS).forEach(function(key) {
        if(ELEMENTS[key].ID === elementId.toString()){
            element = key;
            return;
        }    
    });

    return element;
}

Это, вероятно, не лучшее решение проблемы, но полезно дать вам представление о том, как это сделать.

Приветствия.

0
ответ дан 23 авг. '17 в 12:33
источник

Быстрая и грязная:

function getObjName(obj) {
  return (wrap={obj}) && eval('for(p in obj){p}') && (wrap=null);
}
-1
ответ дан 14 авг. '17 в 13:25
источник