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

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

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


当前回答

如果我们不提循环对象的其他方法,这个问题就不完整了。

如今,许多知名的JavaScript库提供了自己的方法来迭代集合,即在数组、对象和类数组对象上迭代。这些方法使用方便,与任何浏览器都完全兼容。

如果使用jQuery,可以使用jQuery.each()方法。它可以用于对对象和数组进行无缝迭代:$.each(obj,函数(键,值){console.log(键,值);});在Undercore.js中,您可以找到方法_.each(),它遍历一个元素列表,依次生成一个提供的函数(注意iterate函数中参数的顺序!):_.each(obj,函数(值,键){console.log(键,值);});Lo-Dash提供了几种迭代对象财产的方法。Basic _.forEach()(或其别名_.each())对于循环遍历对象和数组非常有用,但是(!)具有长度属性的对象被视为数组,为了避免这种行为,建议使用_.forIn()和_.forOwn()方法(这些方法也有值参数):_.forIn(obj,函数(值,键){console.log(键,值);});_.forIn()迭代对象的自身和继承的可枚举财产,而_.forOwn()只迭代对象的自己的财产(基本上是检查hasOwnProperty函数)。对于简单对象和对象文本,这些方法中的任何一种都可以正常工作。

通常,所有描述的方法都具有与任何提供的对象相同的行为。除了将本机用于。。in循环通常比任何抽象(如jQuery.each())都快,这些方法使用起来非常容易,需要更少的编码,并提供更好的错误处理。

其他回答

这是如何循环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>

for(key in p) {
  alert( p[key] );
}

注意:可以对数组执行此操作,但也要对长度和其他财产进行迭代。

你可以使用我的库monadic对象来实现这一点。它的设计目的是简化对象修改并使其行为类似于数组:

p.forEach((key, value) => console.log(key, value))

安装:npm i一元对象

该库还包括以下方法:

地图滤器每一个一些

有关更多信息,请参阅README!

将对象传递给object.keys()。这将返回一个包含对象中所有键的数组。然后可以使用map循环遍历数组。使用obj[key],其中obj是对象,key是映射迭代中的当前值,可以获得该键/属性的值。

const obj = { name: "Jane", age: 50 };

Object.keys(obj).map( key => {
    console.log(key, obj[key]);
});

最接近python的enumerate函数的解决方案:

for key, value in enumerate(object):
    # Do something

是Object.entries()和for of循环的组合:

for(let [key, value] of Object.entries(object)) {
    // Do something
}

let对象={key1:“value1”,key2:“value2”,key3:“value3”,key4:“value4”,key5:“value5”};for(let[key,value]of Object.entries(Object)){console.log(`${key}->${value}`);}