簡體   English   中英

如何添加屬性到嵌套的javascript數組(對象)?

[英]How to add property to nested javascript array (of objects)?

我正在嘗試向javascript嵌套數組對象添加屬性...

我需要遍歷樹以獲取text屬性的值並將其轉換為小寫並將此數據添加為新屬性(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);

如果要將值保留在舊數組中,只需將新對象推入舊數組即可:

oldObject.push(newObject[0]);

如果您只需要替換整個陣列,那么瑣碎的操作,

oldObject = newObject;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM