【发布时间】:2018-07-28 02:36:54
【问题描述】:
我正在尝试递归循环 thro 对象并在 HTML 中以有组织的方式输出数据。以下是我到目前为止的内容,但我目前被卡住了,因为我只能输出行但不能输出缩进级别。 preview 元素中的示例数据是我正在尝试做的输出表示。
此外,如果有更好的方法来组织/构造数据(通过分组或类似方法),我将不胜感激。
var obj = {
0: {
"Shirts": 0,
"Jeans": 1,
"Brand": "Lorem ipsum"
},
1: {
"Color": {
"blue" : 1,
"red" : 0
},
"Size": {
"Man": {
"small": 1,
"medium": 0,
"large": 0
},
"Women": {
"small": 1,
"medium": 1,
"large": 1
}
}
},
2: {
"Shipping": {
"overNight": "$ 10",
"3 days": "$ 4"
}
},
3: {
"Stock": {
"Man": [
{
"green jeans": 13,
"green shirts": 17,
"green shoes": 21
},
{
"black jeans": 1,
"black shirts": 12,
"black shoes": 53
}
],
"Women": [
{
"green jeans": 2,
"green shirts": 53,
"green shoes": 11
},
{
"black jeans": 6,
"black shirts": 22,
"black shoes": 29
}
]
}
}
}
var dataEl = document.getElementById('data');
var getProperties = function (obj) {
for (var property in obj) {
if (!obj.hasOwnProperty(property)) continue;
if (obj.hasOwnProperty(property) && obj[property] !== null) {
if (obj[property].constructor == Object) {
dataEl.innerHTML += '<div class="row title">' + property + '</div>';
getProperties(obj[property])
} else if (obj[property].constructor == Array) {
dataEl.innerHTML += '<div class="row title">' + property + '</div>';
for (var i = 0; i < obj[property].length; i++) {
getProperties(obj[property][i]);
}
} else {
dataEl.innerHTML += '<div class="row"><span>' + property +'</span>: ' + obj[property] + '</div>';
}
}
}
}
//getProperties(obj);
#data,
#preview {
display: block;
width: 80%;
font-size: 12px;
font-family: Arial, Helvetica;
padding: 10px;
}
#data .row,
#preview .row {
display: inline-block;
width: 100%;
margin-bottom: 2px;
}
#data .row.title,
#preview .row.title {
font-weight: bold;
font-size: 14px;
}
#data .row.indent-1,
#preview .row.indent-1 {
padding-left: 20px;
}
#data .row.indent-2,
#preview .row.indent-2 {
padding-left: 40px;
}
<div id="data"></div>
<!-- This is how it should be structured -->
<div id="preview">
<div class="row"><span>Shirts:</span>0</div>
<div class="row"><span>Jeans:</span>1</div>
<div class="row"><span>Brand:</span>Lorem ipsum</div>
<div class="row title">Color</div>
<div class="row indent-1"><span>blue:</span> 1</div>
<div class="row indent-1"><span>red:</span> 0</div>
<div class="row title">Size</div>
<div class="row title indent-1">Man</div>
<div class="row indent-2"><span>small:</span> 1</div>
<div class="row indent-2"><span>medium:</span> 0</div>
<div class="row indent-2"><span>large:</span> 0</div>
<div class="row title indent-1">Women</div>
<div class="row indent-2"><span>small:</span> 1</div>
<div class="row indent-2"><span>medium:</span> 1</div>
<div class="row indent-2"><span>large:</span> 1</div>
<div class="row title">Shipping</div>
<div class="row indent-1"><span>overNight:</span> $ 10</div>
<div class="row indent-1"><span>3 days:</span> $ 4</div>
<div class="row title">Stock</div>
<div class="row title indent-1">Man</div>
<div class="row indent-2"><span>green jeans:</span> 13</div>
<div class="row indent-2"><span>green shirts:</span> 17</div>
<div class="row indent-2"><span>green shoes:</span> 21</div>
<div class="row indent-2"><span>black jeans:</span> 1</div>
<div class="row indent-2"><span>black shirts:</span> 127</div>
<div class="row indent-2"><span>black shoes:</span> 53</div>
<div class="row title indent-1">Women</div>
<div class="row indent-2"><span>green jeans:</span> 2</div>
<div class="row indent-2"><span>green shirts:</span> 53</div>
<div class="row indent-2"><span>green shoes:</span> 11</div>
<div class="row indent-2"><span>black jeans:</span> 6</div>
<div class="row indent-2"><span>black shirts:</span> 22</div>
<div class="row indent-2"><span>black shoes:</span> 29</div>
</div>
【问题讨论】:
-
你看起来像这样jsfiddle.net/KJQ9K/554 吗?只是为了漂亮地打印 JSON?
-
不,我需要在 html 中表示它,以便我可以操作设计。
标签: javascript html json loops recursion