我有一个JavaScript对象,如下所示:

var p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3"
};

我如何循环遍历p的所有元素(p1、p2、p3…)并获取它们的键和值?


当前回答

如果还想迭代非可枚举财产,可以使用Object.getOwnPropertyNames(obj)返回直接在给定对象上找到的所有财产(可枚举或不可枚举)的数组。

var obj=对象.创建({}{//不可枚举属性获取食物:{value:函数(){return this.foo;},可枚举:false}});obj.foo=1;//可枚举属性Object.getOwnPropertyNames(obj).forEach(函数(名称){document.write(name+':'+obj[name]+'<br/>');});

其他回答

由于es2015越来越流行,我发布了这个答案,其中包括使用生成器和迭代器平滑地遍历[key,value]对。这在其他语言中是可能的,例如Ruby。

好的,这里有一个代码:

常量MyObject={“a”:“您好”,'b':'它',“c”:“我”,“d”:“你”,“e”:“正在查找”,“f”:“for”,[Symbol.iiterat]:函数*(){for(Object.keys(this)的常量i){产量[i,this[i];}}};for(MyObject的常量[k,v]){console.log(`这里是键${k},这里是值${v}`);}

关于如何使用迭代器和生成器的所有信息,您可以在开发者Mozilla页面上找到。

希望它帮助了某人。

编辑:

ES2017将包含Object.entries,这将使对象中的[key,value]对的迭代更加容易。现在已知,根据ts39阶段信息,它将成为标准的一部分。

我认为是时候更新我的答案了,让它变得比现在更新鲜。

常量MyObject={“a”:“您好”,'b':'它',“c”:“我”,“d”:“你”,“e”:“正在查找”,“f”:“for”,};for(Object.entries(MyObject)的常量[k,v]){console.log(`这里是键${k},这里是值${v}`);}

您可以在上找到有关用法的更多信息MDN页面

在javascript中迭代对象的多种方法

正在使用。。。在回路中

变量p={“p1”:“值1”,“p2”:“值2”,“p3”:“值3”};for(输入p){if(p.hasOwnProperty(键)){console.log(`${key}:${p[key]}`)}}

正在使用。。。回路的

变量p={“p1”:“值1”,“p2”:“值2”,“p3”:“值3”};for(对象.keys(p)的let键){console.log(`key:${key}&value:${p[key]}`)}

将forEach()与Object.keys、Object.values、Object.entries一起使用

变量p={“p1”:“值1”,“p2”:“值2”,“p3”:“值3”};Object.keys(p).forEach(key=>{console.log(`${key}:${p[key]}`);});对象.values(p).forEach(值=>{console.log(值);});Object.entries(p).forEach(([key,value])=>{console.log(`${key}:${value}`)})

如果有人需要使用条件循环遍历arrayObjects:

var arrayObjects=〔{“building”:“A”,“status”:“good”},{“building”:“B”,“status”:“恐怖”}〕;for(var i=0;i<arrayObjects.length;i++){console.log(arrayObjects[i]);for(arrayObjects[i]中的键){if(key==“status”&&arrayObjects[i][key]==“good”){console.log(key+“->”+arrayObjects[i][key]);}其他{console.log(“未找到任何内容”);}}}

您必须使用for in循环

但在使用这种循环时要非常小心,因为这将沿着原型链循环所有财产。

因此,在循环中使用for时,请始终使用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
}

这是如何循环javascript对象并将数据放入表中的。<body><脚本>函数createTable(objectArray,fields,fieldTitles){let body=document.getElementsByTagName('body')[0];let tbl=document.createElement('table');let thead=document.createElement('head');let thr=document.createElement('tr');for(objectArray[0]中的p){let th=document.createElement('th');th.appendChild(document.createTextNode(p));thr.appendChild(th);}thead.appendChild(thr);tbl.appendChild(thead);let tbdy=document.createElement('tbody');let tr=document.createElement('tr');objectArray.forEach((对象)=>{设n=0;let tr=document.createElement('tr');for(objectArray[0]中的p){var td=document.createElement('td');td.appendChild(document.createTextNode(object[p]));tr.appendChild(td);n++;};tbdy.appendChild(tr);});tbl.appendChild(tbdy);body.appendChild(待定)返回tbl;}创建表格([{name:“香蕉”,价格:“3.04”},//k[0]{name:“Orange”,价格:“2.56”},//k[1]{name:“苹果”,价格:“1.45”}])</script>