Получение имени свойства объекта - PullRequest
161 голосов
/ 23 ноября 2010

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

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

Но получите название каждого свойства следующим образом.

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

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

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

Ответы [ 11 ]

185 голосов
/ 23 ноября 2010

i - это имя.

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

Так что вы можете сделать:

seperateObj[i] = myObject[i];
132 голосов
/ 12 мая 2014

Использовать Object.keys ():

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

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

17 голосов
/ 23 ноября 2010

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


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

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

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

for (var propName in obj) {
  console.log("Iterating through prop with name", propName, " its value is ", obj[propName])
}
6 голосов
/ 16 марта 2018

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

Например: если объект 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 
})
4 голосов
/ 18 июля 2014

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

Object.keys( myObject )[ 0 ]
Object.keys( myObject )[ 1 ]
...
Object.keys( myObject )[ n ]
3 голосов
/ 01 мая 2015

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

2 голосов
/ 23 августа 2017

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

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

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

1 голос
/ 01 марта 2018

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

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

console.log(Object.getOwnPropertyNames(object1));
// expected output: Array ["a", "b", "c"]
0 голосов
/ 24 января 2018

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

// 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);
}
0 голосов
/ 14 августа 2017

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

function getObjName(obj) {
  return (wrap={obj}) && eval('for(p in obj){p}') && (wrap=null);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...