【发布时间】:2015-05-14 21:31:32
【问题描述】:
这会有点啰嗦,但这里是:
我正在编写两个独立的 Web 应用程序:一个用于生成包含大量数据和格式信息的 JSON 对象,另一个用于将该 JSON 对象转换为格式良好的 HTML 页面以供查看。我目前遇到的特殊问题是嵌套列表。
对于查看应用程序,我编写了一个递归函数,它将解析提供的 javascript 对象并为具有任意数量嵌套元素的列表创建 HTML。
function createUnorderedList(object) {
var ul = $('<ol>');
for (var i = 0; i < object.length; i++) {
if (object[i].children === undefined) {
ul.append($('<li>').text(object[i].value));
} else {
ul.append(
$('<li>').html(
object[i].value + "<ul>" + createUnorderedList(object[i].children) + "</ul>"));
}
}
return ul.html();
}
该函数的 jsfiddle 可以在这里看到:jsfiddle: Recursive HTML List Generation
现在,我需要为 JSON 创建方面创建一个函数。在尝试并未能将我的大脑包裹在如何递归地执行此操作上之后,我选择了一个更线性的函数,如下所示:
function createList( array ) {
var json = { "value": [] } ;
var k = 0 ;
if(array[array.length-1] === "") array.pop() ;
for(var i=0; i<array.length; i++ ){
json.value.push( { "value": array[i] } ) ;
for(var j=i+1; j<array.length; j++) {
if(array[j].charAt(0) === '\t') {
array[j] = array[j].replace( /\t/, '' ) ;
i++;
if(json.value[k].children === undefined)
$.extend( json.value[k], { children : [] } ) ;
json.value[k].children.push( { "value": array[j] } ) ;
} else { k++; j=array.length; }
}
}
return json ;
}
jsfiddle: JSON List Generation.
这个函数只能处理一个数量级的嵌套列表,目前应该足够了,但并不理想。如何使这个函数能够生成具有任意数量嵌套元素的 json 对象?
谢谢。
【问题讨论】:
-
我会创建一个元组数组。对象没有排序。这可能不会给您想要的结果。
-
另外,您可以使用
Array.prototype.reduce()来简化您的逻辑。见makeOrderedList3() in my example。
标签: javascript jquery json recursion