作为练习,我试图学习如何打印JS对象的键和值。我很难过。
以下是我编写的基本对象,只想打印出key : value
var obTest = {
name: "John",
WeddingDate: "10/18/2008",
NumberKids: "2",
Website: "www.samplewebsite.com
};
/* VERSION 1
for (var key in obTest) {
// skip loop if the property is from prototype
if (!obTest.hasOwnProperty(key)) continue;
var obKey = obTest[key];
for (var obProp in obKey) {
// skip loop if the obProperty is from prototype
if(!obKey.hasOwnProperty(obProp)) continue;
// your code
alert(obProp + " : " + obKey[obProp]);
}
};
// note: this prints each character as a key:value
*/
/* VERSION 2
for (var key in obTest) {
if (obTest.hasOwnProperty(key)) {
var obKey = obTest[key];
for (var prop in obKey) {
if (obKey.hasOwnProperty(prop)) {
console.log(prop + " : " + obKey[prop]);
}
}
}
};
// note: this prints each character as a key:value
*/
// VERSION 3
Object.keys(obTest.forEach(function(key) {
console.log(key, obTest[key]);
}));
// note: this gives me a breakpoint and can't figure out why it does not work
如上所述,VERSION 1和VERSION 2打印相同的输出如下:
0 : J
1 : o
2 : h
3 : n
0 : 1
1 : 0
2 : /
3 : 1
4 : 8
5 : /
6 : 2
7 : 0
8 : 0
9 : 8
0 : 2
0 : w
1 : w
2 : w
3 : .
4 : s
5 : a
6 : m
7 : p
8 : l
9 : e
10 : w
11 : e
12 : b
13 : s
14 : i
15 : t
16 : e
17 : .
18 : c
19 : o
20 : m
我使用Visual Studio Code for VERSION 3获得断点。
请帮我制作一个这样的输出:
name : John
WeddingDate : 10/18/2008
NumberKids : 2
Website : www.samplewebsite.com
我不想拥有数字键,特别是那些重复自己的数字键。我读过的其他文章似乎没有任何意义。迭代和打印对象键和值似乎非常简单。
谢谢!
答案 0 :(得分:3)
你可以使用两个嵌套循环,只要一个就足够了:
for (var key in obTest) {
// skip loop if the property is from prototype
if (!obTest.hasOwnProperty(key)) continue;
//find the object corresponding to the current key
var obKey = obTest[key];
//output the key and the corresponding object
alert(key + " : " + obKey);
};
使用第二个循环,您枚举所有对"键:值"在你的对象的每个值内。对于字符串" John",对键:值为(0:" J",1:" o",2:" h&#34 ;,3:" n")
对于版本3,您的括号错误:
Object.keys(obTest) //close parenthesis of keys here
.forEach(function(key) {
console.log(key, obTest[key]);
}); //close only forEach here
答案 1 :(得分:1)
第三次尝试很有希望,但实施错误。要获得所需的输出,您可以使用
function objectString(obj) {
var keys = Object.keys(obj);
return keys.map(v => v + ": " + obj[v]).join("\n");
}
console.log(objectString(obTest));
答案 2 :(得分:1)
使用Object.keys()获取对象的键列表。然后迭代得到它们的值。
var obTest = {
name: "John",
WeddingDate: "10/18/2008",
NumberKids: "2",
Website: "www.samplewebsite.com" };
Object.keys(obTest).forEach(function(key){
if (obTest.hasOwnProperty(key)){
console.log(key + ":" + obTest[key]);
}
});
答案 3 :(得分:1)
只需使用MDN Docs
中的示例即可for (var property in obTest) {
if( obTest.hasOwnProperty( property ) ) {
console.log(property + ": " + obTest[property])
}
}
其中一个问题是您遗漏了“网站”属性价值的"
。
答案 4 :(得分:0)
<ul class="normal-list">
<li>List Item 1</li>
<li>List Item 2</li>
<li class="nested-list">
<ul>
<li>List Item 2.1</li>
<li>List Item 2.2</li>
</ul>
</li>
<li>List Item 3</li>
<li class="nested-list">
<ul>
<li>List Item 3.1</li>
<li>List Item 3.2</li>
</ul>
</li>
<li>List Item 4</li>
</ul>
是你的朋友,它将一个对象转换为一个数组。查看文档here