我想知道JavaScript中是否有任何方法可以循环遍历这样的对象。
for(var i in myObject) {
// ...
}
但是要得到每个属性的名称。
for(var i in myObject) {
separateObj[myObject[i].name] = myObject[i];
}
我似乎无法在Google上找到类似的内容。他们说用它们传递变量的名称,但这不是我想要实现的选项。
感谢您提供的任何帮助。
答案 0 :(得分:185)
i
就是这个名字。
for(var name in obj) {
alert(name);
var value = obj[name];
alert(value);
}
所以你可以这样做:
seperateObj[i] = myObject[i];
答案 1 :(得分:129)
var myObject = { a: 'c', b: 'a', c: 'b' };
var keyNames = Object.keys(myObject);
console.log(keyNames); // Outputs ["a","b","c"]

Object.keys()
为您提供属于输入对象的属性名称数组。
答案 2 :(得分:17)
<强>声明强> 我误解了这个问题:“我能知道一个对象附加到的属性名称”,但是选择留下答案,因为有些人可能会在搜索时结束这里。
不,对象可以附加到多个属性,因此无法知道其名称。
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])
}
答案 3 :(得分:6)
您可以轻松地在对象中进行迭代
例如:如果对象是 var a = {a:&#39; apple&#39;,b:&#39; ball&#39;,c:&#39; cat&#39;,d:&#39; doll&#39;,e: &#39;象&#39;};
Object.keys(a).forEach(key => {
console.log(key) // returns the keys in an object
console.log(a[key]) // returns the appropriate value
})
答案 4 :(得分:3)
按位置直接访问对象属性... 通常对属性[0]有用...所以它保存有关进一步的信息...... 或者在node.js&#39; require.cache [0]&#39;对于第一个加载的外部模块等等。
Object.keys( myObject )[ 0 ]
Object.keys( myObject )[ 1 ]
...
Object.keys( myObject )[ n ]
答案 5 :(得分:2)
在ES5中
E.G。你有这种对象:
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" }
};
现在如果你想要一个能够通过&#39; 0&#39;作为一个参数 - 获得'STEP_ELEMENT&#39;,如果&#39; 2&#39;得到&#39; BLUE_ELEMENT&#39;等等
function(elementId) {
var element = null;
Object.keys(ELEMENTS).forEach(function(key) {
if(ELEMENTS[key].ID === elementId.toString()){
element = key;
return;
}
});
return element;
}
这可能不是问题的最佳解决方案,但很高兴能让您了解如何做到这一点。
干杯。
答案 6 :(得分:2)
除了“ Object.keys(obj)”之外,我们还有一个非常简单的“ for ... in”循环-循环遍历对象的可枚举属性名称。
const obj = {"fName":"John","lName":"Doe"};
for (const key in obj) {
//This will give key
console.log(key);
//This will give value
console.log(obj[key]);
}
答案 7 :(得分:1)
自2018年起,您可以按照Developer Mozilla Documentation
中的说明使用Object.getOwnPropertyNames()
const object1 = {
a: 1,
b: 2,
c: 3
};
console.log(Object.getOwnPropertyNames(object1));
// expected output: Array ["a", "b", "c"]
答案 8 :(得分:0)
当您执行for / in循环时,首先放置,我是属性名称。因此,您拥有属性名称i,并通过执行myObject [i]来访问该值。
答案 9 :(得分:0)
这些解决方案也有效。
sid
答案 10 :(得分:0)
使用Object.keys()
函数从Object
获取属性,它可以帮助按名称搜索属性,例如:
const Products = function(){
this.Product = "Product A";
this.Price = 9.99;
this.Quantity = 112;
};
// Simple find function case insensitive
let findPropByName = function(data, propertyName){
let props = [];
Object.keys(data).forEach(element => {
return props.push(element.toLowerCase());
});
console.log(props);
let i = props.indexOf(propertyName.toLowerCase());
if(i > -1){
return props[i];
}
return false;
};
// calling the function
let products = new Products();
console.log(findPropByName(products, 'quantity'));
答案 11 :(得分:-1)
快速&amp;脏:
function getObjName(obj) {
return (wrap={obj}) && eval('for(p in obj){p}') && (wrap=null);
}