问题描述
我有一个有效的递归函数,可以从一个对象创建一个<ul>
列表,它工作正常,
我的问题是我想跟踪索引,并将其作为类添加到<li>
元素中,
我需要“索引计数系统”以特定方式计数, 这是我想要的输出 :
class0
class0_0
class0_0_0
class0_0_1
class0_1
class0_1_0
class0_1_1
class1
class1_0
class1_0_0
class1_0_1
class1_1
class1_1_0
class1_1_1
通过增加,重新启动并在递归函数中具有多个“索引计数”变量
这是我正在尝试的方法,但是我仍然不知道在哪里正确设置,增加,重置计数器以实现该结果。
var i = 0;
function object2ul(data) {
var json = "<ul>";
for(var key in data) {
json = json + "<li>" +'<b>'+i+'</b>'+ key; i++;
if(typeof data[key] == 'object') {
json = json + object2ul(data[key]);
}else{ i=0;
json = json + '<ul><li>'+ data[key]+'</li></ul>';
}
json = json + "</li>";
}
return json + "</ul>";
}
document.body.innerHTML = object2ul(object);
在此示例中,我省略了设置类的步骤,以避免使函数复杂化
1楼
ray hatfield
0
2015-08-07 01:08:14
像这样吗
var object = { root0: { child0: { leaf: 'text', leaf: 'text' }, child1: { leaf: 'text', leaf: 'text' } }, root1: { child0:{ leaf: 'text', leaf: 'text' }, child1: { leaf: 'text', leaf: 'text' } } }; var i = 0; function object2ul(data, prefix) { prefix = prefix || '0'; // default var json = "<ul>"; var childIndex = 0; for(var key in data) { json = json + "<li>" +'<b>'+i+'</b>'+ key; i++; if(typeof data[key] == 'object') { json = json + object2ul(data[key], prefix + '_' + childIndex); }else{ i=0; json = json + '<ul><li>'+ data[key]+'---(' + prefix + ')</li></ul>'; } json = json + "</li>"; childIndex++; } return json + "</ul>"; } document.body.innerHTML = object2ul(object);
2楼
Jrd
0
2015-08-07 01:18:41
要获得所需的索引类型,必须使用Object.keys。 以下应适用于任意对象:
var testObj = { a: { b: '2', d: '5', e: { f: '3' } }, c: '3' };
var indexes = [];
var object2ul = function (data) {
var keys = Object.keys(data);
var json = "<ul>";
for (var i = 0; i < keys.length; ++i) {
var key = keys[i];
indexes.push(i);
json += "<li>" + "<b>" + indexes.join('_') + "</b>" + key;
if (typeof(data[key]) === 'object') {
json += object2ul(data[key]);
} else {
json += "<ul><li>" + data[key] + "</li></ul>";
}
json += "</li>";
indexes.pop();
}
return json + "</ul>";
}
document.body.innerHTML = object2ul(testObj);
实际情况如下: