2010-11-23 3 views
120

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

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

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

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

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

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

+2

дубликата http://stackoverflow.com/questions/85992/how-do-i-enumerate-the -properties-of-a-javascript-object – wajiw 2010-11-23 20:04:20

+3

`seperate` должно быть` отдельным` – 2012-02-29 22:47:05

+12

@JuanMendes Спасибо, исправлено. Вау, этот вопрос - это взрыв из прошлого. С тех пор я пришел с \ "l" + новым массивом (1000) .join ('o') + 'ng'`. – Olical 2013-05-24 10:01:34

ответ

73

Использование Object.keys():

var keyNames = Object.keys(myObject); 
console.log(keyNames); 

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

175

i - это имя.

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

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

seperateObj[i] = myObject[i]; 
0

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

13

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

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

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

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

Object.keys (MyObject) [0] Object.keys (MyObject) [1] ... Object.keys (MyObject) [N]

3

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

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

Так что, если ваш объект называется, MyObject ...

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

Walla! Это, безусловно, работать в последней светлячок и ie11 и хром ...

Вот некоторая документация на MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

-1

Быстрый & загрязнен:

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

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

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

Cheers.

0

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

// 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

По состоянию на 2018 год, Вы можете использовать Object.getOwnPropertyNames(), как описано в Developer Mozilla Documentation

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

console.log(Object.getOwnPropertyNames(object1)); 
// expected output: Array ["a", "b", "c"] 
Смежные вопросы