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

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

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


当前回答

在可枚举JavaScript对象上进行循环的一个好方法是使用object.keys或object.entries并使用map函数,这对于ReactJS来说可能是非常棒和常见的。如下所示:

// assume items:

const items = {
  first: { name: 'phone', price: 400 },
  second: { name: 'tv', price: 300 },
  third: { name: 'sofa', price: 250 },
};

对于循环和显示ReactJS上的一些UI,如下所示:

~~~
<div>
  {Object.entries(items).map(([key, ({ name, price })]) => (
    <div key={key}>
     <span>name: {name}</span>
     <span>price: {price}</span>
    </div>
  ))}
</div>

实际上,我使用了两次析构函数赋值,一次用于获取key,一次是获取name和price。

其他回答

因为提问者的[第二个目标是循环一些键值对],最后不要寻找循环。

var p ={"p1":"value1","p2":"value2","p3":"value3"};
if('p1' in p){
  var val=p['p1'];
  ...
}

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

如今,许多知名的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())都快,这些方法使用起来非常容易,需要更少的编码,并提供更好的错误处理。

在ECMAScript 5下,可以组合Object.keys()和Array.protocol.forEach():

var obj = { first: "John", last: "Doe" };

Object.keys(obj).forEach(function(key) {
    console.log(key, obj[key]);
});

ECMAScript 6添加了。。。第页,共页:

for (const key of Object.keys(obj)) {
    console.log(key, obj[key]);
}

ECMAScript 8添加了Object.entries(),避免了查找原始对象中的每个值:

Object.entries(obj).forEach(
    ([key, value]) => console.log(key, value)
);

你可以组合。。。of、destructuring和Object.entries:

for (const [key, value] of Object.entries(obj)) {
    console.log(key, value);
}

Object.keys()和Object.entries()以与for相同的顺序迭代财产。。。但忽略原型链。只迭代对象自己的可枚举财产。

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

单行和更可读的代码可以。。

Object.entries(myObject).map(([key, value]) => console.log(key, value))