获取对象的属性名称

我想知道是否有任何JavaScript的方式来循环通过像这样的对象。

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

但是得到这样的每个属性的名称。

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

我似乎无法在Google上find任何类似的内容。 他们说要传递variables的名字,但这不是我想要实现的选项。

感谢您提供的任何帮助。

使用Object.keys():

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

Object.keys()为您提供属于input对象的属性名称数组。

i是这个名字。

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

所以你可以这样做:

 seperateObj[i] = myObject[i]; 

免责声明我误解了这个问题:“我可以知道一个对象所属的属性名称”,但是select了离开答案,因为有些人在search时可能会在这里结束。


不,一个对象可以附加到多个属性,所以它无法知道它的名字。

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

根据您的母语是什么来获取对象或“数组键”或“数组索引”的属性…..使用Object.keys()方法。

重要的是,这只与“现代浏览器”兼容:

所以如果你的对象被调用,myObject …

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

瓦拉! 这一定会在最新的Firefox和IE11和铬…

这里是MDN的一些文档https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

用于按位置直接访问对象属性…通常对于propoerty [0]有用…因此它保存关于进一步的信息…或者在第一个加载的外部模块的node.js'require.cache [0]'中等等

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

当你做for / in循环时,你首先提出,我是属性名称。 所以你有属性名称,我,并通过做myObject [我]访问的价值。

在ES5

EG你有这样的对象:

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

这可能不是问题的最佳解决scheme,但它很好给你一个想法如何做到这一点。

干杯。

快速和肮脏:

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