当前位置: 代码迷 >> JavaScript >> 递归地反对ul列表并在javascript中添加带有索引的类
  详细解决方案

递归地反对ul列表并在javascript中添加带有索引的类

热度:16   发布时间:2023-06-05 15:52:51.0

我有一个有效的递归函数,可以从一个对象创建一个<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);

在此示例中,我省略了设置类的步骤,以避免使函数复杂化

像这样吗

 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); 

要获得所需的索引类型,必须使用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);

实际情况如下:

  相关解决方案