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

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

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


当前回答

正在使用。。。in和Object hasOwnProperty变量p={“p1”:“值1”,“p2”:“值2”,“p3”:“值3”};for(p中的var键){if(p.hasOwnProperty(键)){console.log(key,':',p[key]);}}正在使用。。。的和对象键变量p={“p1”:“值1”,“p2”:“值2”,“p3”:“值3”};for(Object.keys(p)的var键){console.log(键,“:”,p[key])}使用Object键和forEach变量p={“p1”:“值1”,“p2”:“值2”,“p3”:“值3”};Object.keys(p).forEach(函数(键){console.log(key,':',p[key]);});正在使用。。。的和对象条目变量p={“p1”:“值1”,“p2”:“值2”,“p3”:“值3”};for(let[key,value]of Object.entries(p)){console.log(键,“:”,值);}使用Object条目和forEach变量p={“p1”:“值1”,“p2”:“值2”,“p3”:“值3”};Object.entries(p).forEach(([key,value])=>console.log(key,':',value));

其他回答

在ES6中,我们有众所周知的符号来公开一些以前的内部方法,您可以使用它来定义迭代器如何为这个对象工作:

var p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3",
    *[Symbol.iterator]() {
        yield *Object.keys(this);
    }
};

[...p] //["p1", "p2", "p3"]

这将给出与用于…相同的结果。。。在es6循环中。

for(var key in p) {
    console.log(key);
}

但了解您现在使用es6的能力很重要!

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

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

您必须使用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
}

在Object.keys()上使用for

喜欢:

let对象={“key1”:“value1”,“key2”:“value2”,“key3”:“value3”};for(let key of Object.keys(对象)){console.log(key+“:”+对象[key])}

自ES2015以来,您可以使用for of循环直接访问元素:

// before ES2015
for(var key of elements){
  console.log(elements[key]);
}


// ES2015
for(let element of elements){
  console.log(element);
}

希望这对某人有所帮助。