我有一个像以下 JavaScript 对象:
var p = {
"p1": "value1",
"p2": "value2",
"p3": "value3"
};
现在我想循环遍历所有p
元素( p1
, p2
, p3
......)并获取它们的键和值。我怎样才能做到这一点?
如有必要,我可以修改 JavaScript 对象。我的最终目标是遍历一些键值对,如果可能的话,我想避免使用eval
。
您可以使用其他人显示的for-in
循环。但是,您还必须确保获得的密钥是对象的实际属性,而不是来自原型。
这是片段:
var p = {
"p1": "value1",
"p2": "value2",
"p3": "value3"
};
for (var key in p) {
if (p.hasOwnProperty(key)) {
console.log(key + " -> " + p[key]);
}
}
在 ECMAScript 5 下,您可以组合Object.keys()
和Array.prototype.forEach()
:
var obj = { first: "John", last: "Doe" };
Object.keys(obj).forEach(function(key) {
console.log(key, obj[key]);
});
ES6 增加for...of
:
for (const key of Object.keys(obj)) {
console.log(key, obj[key]);
}
ES2017 添加了Object.entries()
,避免了查找原始对象中的每个值:
Object.entries(obj).forEach(
([key, value]) => console.log(key, value)
);
Object.keys()
和Object.entries()
以与for...in
循环相同的顺序迭代属性, 但忽略原型链 。只迭代对象自己的可枚举属性。
编辑:ES2016→ES6
你必须使用for-in 循环
但是在使用这种循环时要非常小心,因为这将循环原型链中的所有属性 。
因此,在使用 for-in 循环时,始终使用hasOwnProperty
方法来确定迭代中的当前属性是否真的是您正在检查的对象的属性:
for (var prop in p) {
if (!p.hasOwnProperty(prop)) {
//The current property is not a direct property of p
continue;
}
//Do your logic with the property here
}