我有一个JavaScript对象,如下所示:
var p = {
"p1": "value1",
"p2": "value2",
"p3": "value3"
};
我如何循环遍历p的所有元素(p1、p2、p3…)并获取它们的键和值?
我有一个JavaScript对象,如下所示:
var p = {
"p1": "value1",
"p2": "value2",
"p3": "value3"
};
我如何循环遍历p的所有元素(p1、p2、p3…)并获取它们的键和值?
当前回答
我会这样做,而不是在每个for…中检查obj.hasOwnerProperty。。。在循环中。
var obj = {a : 1};
for(var key in obj){
//obj.hasOwnProperty(key) is not needed.
console.log(key);
}
//then check if anybody has messed the native object. Put this code at the end of the page.
for(var key in Object){
throw new Error("Please don't extend the native object");
}
其他回答
由于ES06,您可以使用
let arrValues = Object.values( yourObject) ;
它返回一个对象值数组,而不从Prototype中提取值!!
MDN DOCS对象.values()
还有钥匙(在我面前准备好了)
let arrKeys = Object.keys(yourObject);
您可以向所有对象添加一个简单的forEach函数,这样就可以自动循环任何对象:
Object.defineProperty(Object.prototype, 'forEach', {
value: function (func) {
for (var key in this) {
if (!this.hasOwnProperty(key)) {
// skip loop if the property is from prototype
continue;
}
var value = this[key];
func(key, value);
}
},
enumerable: false
});
对于那些不喜欢“For…in”方法的人:
Object.defineProperty(Object.prototype, 'forEach', {
value: function (func) {
var arr = Object.keys(this);
for (var i = 0; i < arr.length; i++) {
var key = arr[i];
func(key, this[key]);
}
},
enumerable: false
});
现在,您可以简单地调用:
p.forEach (function(key, value){
console.log ("Key: " + key);
console.log ("Value: " + value);
});
如果您不想与其他forEach方法发生冲突,可以使用您的唯一名称命名它。
变量p={“p1”:“值1”,“p2”:“值2”,“p3”:“值3”};var myMap=新地图(Object.entries(p));for(let[k,v]of myMap.entries()){console.log(`${k}:${v}`)}<h3>ECMAScript 2017年</h3><p><b>Object.entries()</b>使将<b>对象转换为映射</b>变得简单:</p>
下面是另一种迭代对象的方法。
变量p={“p1”:“值1”,“p2”:“值2”,“p3”:“值3”};Object.keys(p).forEach(key=>{console.log(key,p[key])})
变量p={“p1”:“值1”,“p2”:“值2”,“p3”:“值3”};for(p中的var键){if(p.hasOwnProperty(键)){console.log(key+“=”+p[key]);}}<p>输出:<br>p1=值1<br>p2=值2<br>p3=值3</p>