【发布时间】:2019-11-26 15:56:29
【问题描述】:
想象一个具有以下结构的 JSON 对象:
{
"dimension-1": {
"value1": "",
"value2": "",
"value3": "",
"value4": ""
},
"dimension-2": {
"value1": "",
"value2": "",
"value3": "",
"value4": "",
"dimension-2.1": {
"value1": "",
"dimension-2.2": {
"value1": ""
}
}
}
}
对象可以有无限数量的嵌套,并且数量是未知。
我想要创建的是一个列表,它使用Vue List Rendering 功能或类似功能(如果可能)来表示 JSON 对象。最后我会收到这样的东西:
<ul>
<li>
dimension-1
<ul>
<li>value-1</li>
<li>value-2</li>
<li>value-3</li>
<li>value-4</li>
</ul>
</li>
<li>
dimension-2
<ul>
<li>value-1</li>
<li>value-2</li>
<li>value-3</li>
<li>value-4</li>
<li>
dimension-2.1
<ul>
<li>value-1</li>
<li>
dimension-2.2
<ul>
<li>value1</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
使用普通的 JS 这很容易做到:
const object = {
"dimension-1": {
"value1": "",
"value2": "",
"value3": "",
"value4": ""
},
"dimension-2": {
"value1": "",
"value2": "",
"value3": "",
"value4": "",
"dimension-2.1": {
"value1": "",
"dimension-2.2": {
"value1": ""
}
}
}
}
function createHTML(json, isArray) {
var html = '<ul>';
for (var key in json) {
if (typeof json[key] == 'object') {
html += '<li>' + (!isArray ? '<strong>' + key + '</strong>' : '') + '</li>' + createHTML(json[key], (json[key] instanceof Array ? 1 : 0));
} else {
html += '<li>' + key + '</li>';
}
}
return html + '</ul>';
}
document.getElementById('output').innerHTML = createHTML(object, false);
<div id="output"></div>
但是,由于html += '<li>' + (!isArray ? '<strong>' + key + '</strong>' : '') + '</li>' + -->createHTML(json[key], (json[key] instanceof Array ? 1 : 0))<--;这个部分,这显然行不通。
那么我的问题的解决方案或替代方案是什么?
【问题讨论】:
标签: javascript json vue.js