获取对象的属性名称
我想知道是否有任何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); }