2013-05-20 32 views
0

我寫了一個傳統的遞歸循環,但是當條件滿足時它不返回值,但仍然繼續循環。我試圖打破,但並沒有停止。如何使JSON遞歸工作

我的代碼和JSON如下。不過,我在控制檯上看到,當id爲「2」時,該值會按預期填充一次。也沾搜索做得正確,以及但是當我通過調用函數檢查返回的對象util.iterate(json)調用函數對象的值是undefined

util.iterate = function (obj){ 
    for(var i in obj) 
    { 
     if(i === "id" && obj[i] === "2"){ 
      console.log("test" +obj[i] ); 
      return obj; 
      //break; does not work either 
     } 
     else if (typeof(obj[i])=="object"){ 
      this.iterate(obj[i]); 
     } 
    } 
} 

JSON:

{ 
    "id": "0", 
    "item": [{ 
     "id": "1", 
     "text": "1111", 
     "userdata": [{ 
      "name": "name", 
      "content": "BK" 
     }] 
    }, 
    { 
     "id": "2", 
     "select": "1", 
     "text": "222222", 
     "item": [{ 
      "id": "21", 
      "text": "child" 
     }] 
    }, 
    { 
     "id": "3", 
     "text": "3333" 
    }] 
} 
+0

您的JSON是一個字符串? – lante

+0

只需一眼就能看到它,因爲如果一件物品被「找到」,你就不會返回任何東西。如果'this.iterate(obj [i]);'返回一個值,你必須返回。 – travis

回答

1

我想你缺少一個return

else if (typeof(obj[i])=="object"){ 
     return this.iterate(obj[i]); 
    }// ^^^^^^ 
+0

是的,它的工作。返回是我認爲使用調試器時顯示未定義的問題。 – user593029

2

你需要,如果你找到一個返回結果:

util.iterate = function (obj){ 
     for(var i in obj) 
     { 
       if(i === "id" && obj[i] === "2"){ 
        console.log("test" +obj[i] ); 
        //ffmodifierutil.storeObj = obj; 
        return obj; 
        //break; does not work either 
       } 
       else if (typeof(obj[i])=="object"){ 
        var res = this.iterate(obj[i]); 
        if (res) return res; 
       } 
     } 
    } 

參見:http://jsfiddle.net/tKFe2/