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

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

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


当前回答

当对象实现.next()方法时,它将成为迭代器

常量james={name:“James”,高度:`5'10“`,重量:185,[符号迭代器](){让财产=[]for(let key of Object.keys(james)){财产推送(键);}索引=0;返回{下一个:()=>{let键=财产[索引];let value=this[key];让done=索引>=属性.length-1;索引++;返回{钥匙价值完成};}};}};constiterator=james[Symbol.iiterator]();console.log(迭代器.next().value);//'詹姆斯console.log(迭代器.next().value);//`5'10`console.log(迭代器.next().value);//185

其他回答

由于ES06,您可以使用

let arrValues = Object.values( yourObject) ;

它返回一个对象值数组,而不从Prototype中提取值!!

MDN DOCS对象.values()

还有钥匙(在我面前准备好了)

let arrKeys   = Object.keys(yourObject);

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

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

在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的能力很重要!

变量p={“p1”:“值1”,“p2”:“值2”,“p3”:“值3”};var myMap=新地图(Object.entries(p));for(let[k,v]of myMap.entries()){console.log(`${k}:${v}`)}<h3>ECMAScript 2017年</h3><p><b>Object.entries()</b>使将<b>对象转换为映射</b>变得简单:</p>

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

你可以这样试试。myObject将是{name:“”,phone:“”}等等,这将生成密钥和值。所以这里的关键是名字,电话和价值就像狗,123123。

示例{name:“dog”}

这里的键是名字,值是狗。