2010-07-30 108 views
0
{ 

    "fulltime": [ 

     {"name": "oscar godson", "age": "20", "email": "[email protected]"}, 

     {"name": "daniel erickson", "age": "25", "email": "[email protected]"}, 

     {"name": "john doe", "age": "18", "email": "[email protected]m"} 

    ], 

    "parttime":[ 

     {"name": "bill johnson", "age": "35", "email": "[email protected]"} 

    ] 



} 

並且不知道任何這些值,例如,全職可以等於任何事情。即時通訊尋找一個函數/方法循環通過它...請不要jQuery。如何循環此(JSON)

而且,我想基本上得到的輸出:全職 - >裏面所有全職,兼職的 - >兼職的所有內,等

+1

什麼用你的循環呢?驗證?可視化? – Peter 2010-07-30 07:50:05

回答

0
for (key in your_object) { 
    console.log(key + " people:"); 
    // "key" is "fulltime", "parttime", etc 
    for (var i = 0; i < your_object[key].length; i++) { 
     console.log(your_object[key][i]); 
    } 
} 
+0

但是,我想要一個更詳細的輸出...例如全職,然後全職內部的所有東西,然後兼職,那麼在兼職的所有什麼,等等。 – 2010-07-30 07:47:37

+0

現在呢? – 2010-07-30 07:52:41

+0

即時獲取全職人員: - >全職,全職等,它不顯示人員的數據? – 2010-07-30 07:53:03

0

假如你已經安裝Firebug的:

for(var key in json) { 
    //"fulltime", "parttime" 
    console.log("Checking " + key); 
    for(var i = 0; i < json[key].length; i++){ 
    var person = json[key][i]; 
    //Each person 
    for(var prop in person) { 
     console.log(prop + ": " + person[prop]); 
    } 
    } 
} 

編輯:請注意,您不會在數組上迭代for ... in ...。要遍歷數組,請使用「常規」方式,使用for(var i = 0; i < array.length; i++){...}

0

您可以使用遞歸函數來完成此操作。但是你需要小心循環引用。看下面的例子:

var arr = []; 

    /** 
    * Gets the string representation of the specified object. This method is 
    * used for debugging 
    * @param {Object} Object to convert to string 
    * @return {String} The string representation of the object 
    */ 
    var toObjectSource = function(obj) { 
    if(obj === null) { 
     return "[null]"; 
    } 
    if(obj === undefined) { 
     return "[undefined]"; 
    } 

    var str = "["; 
    var member = null; 
    for(var each in obj) { 
     try { 
      member = obj[each]; 
      if(arr.indexOf(member) === -1) { // the indexOf function is not available 
              // on older versions of js 
       arr.push(member); 
       str += each + "=" + toObjectSource(member) + ", "; // but beware of this 
                   // recursive call!!! 
      } 
     }catch(err) { 
      alert(err); 
     } 
    } 
    return str + "]"; 
    } 

檢查的原因是。它會給你的情況下,「太多遞歸」的對象是這樣的:

所有的
var obj = { 
    "a": "a", 
    "b": "b" 
} 
obj.c = obj; 
0

首先,你可以驗證http://www.jsonlint.com/您的JSON數據。

如果您還沒有將帶有JSON的字符串轉換爲對象,則應使用網絡瀏覽器中的函數或從http://www.json.org/js.html將輸入字符串轉換爲對象。

要循環瀏覽對象的屬性,可以使用"for in"循環。它一般總是推薦以下形式使用該循環:

for (var name in myObject) { 
    if (myObject.hasOwnProperty(name)) { 
     // .... 
    } 
} 

(見例如http://www.jslint.com/lint.html#forin的解釋)。您應該不要忘記在for聲明或之前的某處聲明namevar name。如果你忘記了這個變量,那麼這個變量將被解釋爲一個全局變量,你的代碼將會緩慢運行。

使用標準for循環代替"for in"循環更有效地循環通過數組元素。此外,爲了獲得更多的性能優勢,您應該總是將一個屬性的索引緩存爲局部變量中的一次。例如,循環

for (var i = 0; i < your_object[key].length; i++) { 
    console.log(your_object[key][i]); 
} 

應更好地改寫如下:

var arr = your_object[key]; 
var len = arr.length; 
for (var i = 0; i < len; i++) { 
    console.log(arr[i]); 
}