javascript - 如何向(对象的)嵌套 javascript 数组添加属性?

标签 javascript object recursion

我正在尝试向 javascript 嵌套数组对象添加属性...

我需要遍历树获取文本属性的值并将其转换为小写并将此数据添加为新属性(lowerText)

旧数组:

 var oldObject= [{
        text: "Subgroup3",
        items: [{
            text: "subgroup5",
            items: [{
                text: "subgroup6",
                items: [{
                    text: "subgroup7",
                    items: [{
                        text: "subgroup8"
                    }]
                }]
            }]
        }]
    }]

我需要如下新的数组对象:

   var newObject= [{
        text: "Subgroup3",
        lowerText:"subgroup3",
        items: [{
            text: "subgroup5",
            lowerText:"subgroup5",
            items: [{
                text: "subgroup6",
                lowerText:"subgroup6",
                items: [{
                    text: "subgroup7",
                    lowerText:"subgroup7",
                    items: [{
                        text: "subgroup8",
                        lowerText:"subgroup8",
                    }]
                }]
            }]
        }]
    }]

这是我尝试过的,循环遍历每个对象并将项目(数组)传递给递归函数来设置属性,但它似乎工作得不好。不确定我做错了什么,有人可以帮我处理这段代码吗?

for (var i = 0; i < data.length; i++) {
                    data[i].lowerText=data[i].text.toLowerCase();
                    loopTree(data[i].items);
                }

function loopTree(node){
 if (node) {
        $.each(node, function (idx, item) {
            item.lowerText=item.text.toLowerCase();
            if(item.items){
                loopTree(item.items)
            }
        });
    }
    }

编辑:下面的代码完成了这项工作。

  for (var i = 0; i < data.length; i++) {
                    if(data[i]){
                        process( data[i]);
                    }
                }

function process(val) {
    val.lowerText = val.text.toLowerCase();  
    if(val.items){
        for(var i = 0, len = val.items.length; i < len; i++) {
            process(val.items[i]);
        }
    }
}

最佳答案

如果您不想克隆对象而只想修改现有对象,请尝试以下操作:

function process(val) {
   val.lowerText = val.text.toLowerCase();

   for(var i = 0, len = val.items.length; i < len; i++) {
       process(val.items[i]);
   }
}

process(obj);

关于javascript - 如何向(对象的)嵌套 javascript 数组添加属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14367101/

相关文章:

java - 如何向后实现递归算法

sql - MS SQL 的递归函数

javascript - Passport.js 成功身份验证根本不调用

javascript - React onClick 状态不会切换回来

java - 在 Java 中创建对象(继承和多态)

Java - 帮助将字符串转换为类对象

C++/SDL 'void*' 不是点对对象类型

javascript - 不需要的多个来电

javascript - deepstream 列表订阅数据

javascript - jQuery:查找 div 中的所有表并重置类和属性