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

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

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

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

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

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

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

Ответ 1

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

var myObject = { a: 'c', b: 'a', c: 'b' };
var keyNames = Object.keys(myObject);
console.log(keyNames); // Outputs ["a","b","c"]

Ответ 2

i - это имя.

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

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

seperateObj[i] = myObject[i];

Ответ 3

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


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

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])
}

Ответ 4

Вы можете легко перебирать объекты

Например: если объект является var a = {a: 'apple', b: 'ball', c: 'cat', d: 'doll', e: 'elephant'};

Object.keys(a).forEach(key => {
   console.log(key) // returns the keys in an object
   console.log(a[key])  // returns the appropriate value 
})

Ответ 5

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

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

Ответ 6

Чтобы получить свойство объекта или "ключ массива" или "индекс массива" в зависимости от вашего родного языка... Используйте метод 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

Ответ 7

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

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

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

Ответ 8

Начиная с 2018 года, вы можете использовать Object.getOwnPropertyNames() как описано в документации разработчика Mozilla.

const object1 = {
  a: 1,
  b: 2,
  c: 3
};

console.log(Object.getOwnPropertyNames(object1));
// expected output: Array ["a", "b", "c"]

Ответ 9

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

Ответ 10

Эти решения тоже работают.

// Solution One
function removeProperty(obj, prop) {
  var bool;
  var keys = Object.keys(obj);
  for (var i = 0; i < keys.length; i++) {
    if (keys[i] === prop) {
      delete obj[prop];
      bool = true;
    } 
  }
  return Boolean(bool);
}


//Solution two
function removeProperty(obj, prop) {
  var bool;
  if (obj.hasOwnProperty(prop)) {
      bool = true;
      delete obj[prop];
  }
  return Boolean(bool);
}

Ответ 11

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

function getObjName(obj) {
  return (wrap={obj}) && eval('for(p in obj){p}') && (wrap=null);
}