我有一个JavaScript对象,如下所示:
var p = {
"p1": "value1",
"p2": "value2",
"p3": "value3"
};
我如何循环遍历p的所有元素(p1、p2、p3…)并获取它们的键和值?
我有一个JavaScript对象,如下所示:
var p = {
"p1": "value1",
"p2": "value2",
"p3": "value3"
};
我如何循环遍历p的所有元素(p1、p2、p3…)并获取它们的键和值?
当前回答
在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}`)})
其他回答
我在使用Angular时遇到了类似的问题,这里是我找到的解决方案。
步骤1。获取所有对象关键点。使用Object.keys。此方法返回给定对象自己的可枚举财产的数组。
步骤2。创建一个空数组。这是所有财产都将存在的地方,因为您的新ngFor循环将指向此数组,所以我们必须捕获所有属性。步骤3。迭代抛出所有键,并将每个键推入您创建的数组中。这是代码中的样子。
// Evil response in a variable. Here are all my vehicles.
let evilResponse = {
"car" :
{
"color" : "red",
"model" : "2013"
},
"motorcycle":
{
"color" : "red",
"model" : "2016"
},
"bicycle":
{
"color" : "red",
"model" : "2011"
}
}
// Step 1. Get all the object keys.
let evilResponseProps = Object.keys(evilResponse);
// Step 2. Create an empty array.
let goodResponse = [];
// Step 3. Iterate throw all keys.
for (prop of evilResponseProps) {
goodResponse.push(evilResponseProps[prop]);
}
这里是原始帖子的链接。https://medium.com/@papponmx/循环对象属性-带ngfor-in-angular-869cd7b2ddcc
由于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页面
Object.entries(myObject).map(([key, value]) => console.log(key, value))
你可以这样试试。myObject将是{name:“”,phone:“”}等等,这将生成密钥和值。所以这里的关键是名字,电话和价值就像狗,123123。
示例{name:“dog”}
这里的键是名字,值是狗。
将对象传递给object.keys()。这将返回一个包含对象中所有键的数组。然后可以使用map循环遍历数组。使用obj[key],其中obj是对象,key是映射迭代中的当前值,可以获得该键/属性的值。
const obj = { name: "Jane", age: 50 };
Object.keys(obj).map( key => {
console.log(key, obj[key]);
});
您可以使用for in循环,如其他人所示。然而,您还必须确保获得的密钥是对象的实际属性,而不是来自原型。
下面是片段:变量p={“p1”:“值1”,“p2”:“值2”,“p3”:“值3”};for(p中的var键){if(p.hasOwnProperty(键)){console.log(键+“->”+p[key]);}}
对于具有Object.keys()选项的:
变量p={0:“值1”,“b”:“值2”,键:“value3”};for(Object.keys(p)的var键){console.log(key+“->”+p[key])}
请注意for-of而不是for-in的用法,如果不使用,它将在命名的财产上返回undefined,并且Object.keys()确保只使用对象自己的财产,而不使用整个prototype-chain财产
使用新的Object.entries()方法:
注意:Internet Explorer本机不支持此方法。您可以考虑将Polyfill用于较旧的浏览器。
const p = {
"p1": "value1",
"p2": "value2",
"p3": "value3"
};
for (const [key, value] of Object.entries(p)) {
console.log(`${key}: ${value}`);
}