我有一个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…)并获取它们的键和值?
当前回答
方法返回给定对象自己的可枚举财产的数组。在此处阅读更多信息
变量p={“p1”:“值1”,“p2”:“值2”,“p3”:“值3”};Object.keys(p).map((key)=>console.log(key+“->”+p[key]))
其他回答
Object.entries()函数:
变量p={“p1”:“值1”,“p2”:“值2”,“p3”:“值3”};for(Object.entries(p)中的var i){var key=对象条目(p)[i][0];var value=对象条目(p)[i][1];console.log('key['+i+']='+key+'+'value['+i+']='+value);}
在ECMAScript 5中,在literal-Object.keys的迭代字段中有了新的方法
您可以在MDN上看到更多信息
我的选择如下,作为当前版本浏览器(Chrome30、IE10、FF25)中的更快解决方案
var keys = Object.keys(p),
len = keys.length,
i = 0,
prop,
value;
while (i < len) {
prop = keys[i];
value = p[prop];
i += 1;
}
您可以将此方法的性能与jsperf.com上的不同实现进行比较:
扩展实施对象键迭代对象文字迭代
您可以在Kangax的兼容表上看到浏览器支持
对于旧浏览器,您有简单而完整的polyfill
UPD:
perfjs.info上此问题中所有最常见情况的性能比较:
对象文字迭代
你可以使用我的库monadic对象来实现这一点。它的设计目的是简化对象修改并使其行为类似于数组:
p.forEach((key, value) => console.log(key, value))
安装:npm i一元对象
该库还包括以下方法:
地图滤器每一个一些
有关更多信息,请参阅README!
var p=[{“用户名”:“ordermanageadmin”,“user_id”:“2”,“resource_id”“Magento_Sales::actions”},{“用户名”:“ordermanageadmin_1”,“user_id”:“3”,“resource_id”“Magento_Sales::actions”}]for(p中的var值){for(值中的var键){if(p.hasOwnProperty(键)){console.log(键+“->”+p[key]);}}}
通过带有forEach()的原型,它应该跳过原型链财产:
Object.prototype.each = function(f) {
var obj = this
Object.keys(obj).forEach( function(key) {
f( key , obj[key] )
});
}
//print all keys and values
var obj = {a:1,b:2,c:3}
obj.each(function(key,value) { console.log(key + " " + value) });
// a 1
// b 2
// c 3