获取对象的属性名

我想知道在JavaScript中是否有任何方法可以像这样遍历对象。

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

但是像这样获取每个属性的名称。

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

我在谷歌上找不到类似的。他们说要传递变量的名称,但这不是我要实现的一个选项。

谢谢你能提供的任何帮助。

431706 次浏览

i是名称。

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

你可以这样做:

seperateObj[i] = myObject[i];

当你先执行for/in循环时,i是属性名。所以你有了属性名i,并通过myObject[i]来访问这个值。

< >强免责声明 我把这个问题误解为:“我能知道一个对象所附加的属性名吗”,但选择留下答案,因为有些人在搜索时可能会在这里结束


不,一个对象可以附加到多个属性,因此它无法知道自己的名称。

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

使用种():

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

Object.keys()给你一个属于输入对象的属性名数组。

直接访问对象属性的位置… 一般用于属性[0]…所以它包含了进一步… 或者在node.js的require中。缓存[0]'为第一个加载的外部模块,等等,等等

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

获取对象的属性或“数组键”或“数组索引”,具体取决于您的母语是什么.....使用Object.keys()方法。

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

如果你的对象叫做myObject。

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

要人!这绝对适用于最新的firefox、ie11和chrome…

以下是MDN的一些文档 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys < / p >

快速的,脏:

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

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

这可能不是这个问题的最佳解决方案,但它能给你一个如何去做的想法。

欢呼。

这些解决方案也很有效。

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

自2018年起,你可以使用Object.getOwnPropertyNames(),如开发者Mozilla文档中所述

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


console.log(Object.getOwnPropertyNames(object1));
// expected output: Array ["a", "b", "c"]

您可以轻松地在对象中迭代

eg:如果对象是 var ={答:“苹果”,乙:“球”,c:‘猫’,d:“娃娃”,e:‘大象’};< / p >

Object.keys(a).forEach(key => {
console.log(key) // returns the keys in an object
console.log(a[key])  // returns the appropriate value
})

除了“对象”。Keys (obj)",我们有very simple "for…循环-在对象的可枚举属性名上循环。

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

}

使用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'));