2013-01-16 102 views
2

我試圖將屬性添加到JavaScript的嵌套數組對象...如何將屬性添加到嵌套的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", 
        }] 
       }] 
      }] 
     }] 
    }] 

這是我試過了,廁所ping通過每個對象並將項目(數組)傳遞給遞歸函數來設置屬性,但它似乎不能正常工作。不知道我在做什麼錯,有人可以幫我用這段代碼嗎?

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]); 
     } 
    } 
} 
+0

僅供參考,這不是JSON,它的JavaScript數組和對象文字。 – bfavaretto

回答

4

如果你不想要克隆的對象,只是修改現有的,試試這個:

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

如果要保留舊的陣列中的價值,只是把新對象到舊數組:

oldObject.push(newObject[0]);

如果你只需要更換整個陣列,它的瑣碎,

oldObject = newObject;

相關問題