2017-07-19 95 views
0

我想我錯過了「for in」語句的用法。 我有一個JSON文件從MongoDB的查詢返回(的NodeJS +貓鼬),他的結構是這樣的:奇怪的行爲「在」聲明(NodeJS)

[{ 
    "_id":"596f2f2ffbf8ab12bc8e5ee7", 
    "date":"1500458799794", 
    "questionId":4249, 
    "__v":0, 
    "myArray":[ 
    "1234567", 
    "89", 
    "5678901" 
    ] 
    }, 
    { 
    "_id":"596f2f2ffbf8ab12bc8e5ee5", 
    "date":"1500458799795", 
    "questionId":4245, 
    "__v":0, 
    "myArray":[ 
    "1234565", 
    "5678905" 
    ] 
    }] 

在「在」 cicle我得到的每一個文件,到另一個我要遍歷數組「myArray」。問題是當我嘗試迭代數組「myArray」。如果我重複它「對」的聲明,我收到了很多其他的錯誤的東西,就像如果我循環查詢返回的文件:如果我有一個經典的遍歷它

[null,{},{"_id":"596f2f2ffbf8ab12bc8e5ee7","date":"1500458799794","questionId":4249,"__v":0,"myArray"["1234567","89","5678901"]},null,null,....,"myArray",true,[],{"caster":{"enumValues":[],"regExp":null,"path":"myArray","instance":"String","validators":[],"setters":[],"getters":[],"options":{},"_index":null},"path":"whoDislikes","instance":"Array"....etc etc... ] 

for語句都好: ["1234567","89","5678901"]

爲什麼? 代碼如下:

for(question in data){ 
     var myArray=data[question].myArray; 
     console.log(JSON.stringify(myArray)); //this print ["1234567","89","5678901"] 

     for(var i=0;i<myArray.length;i++){ 
     console.log(myArray[i]); //this print ["1234567","89","5678901"] 
     } 
     for(element in myArray){ 
      console.log(myArray[element]); //this print a lot of wrong stuff! 
     } 
    } 
+3

'對... in'在所有迭代*對象屬性*,不只是數組中indicies。包括任何原型鏈。人們通常不會以這種方式編寫JavaScript(將數組視爲對象),並且部分出於這個原因,使用不太容易出錯的Array.prototype.map和Array.prototype.forEach函數。 –

回答

2

這是因爲貓鼬返回一個文件,所以你看到的屬性是那些進一步檢查原型鏈。

我認爲你要麼需要的hasOwnProperty測試for ... in循環,使用經典的循環,或使用myArray.forEach(function (element) {});

+0

我想這取決於他描述的「錯誤的東西」。我不知道Mongoose文檔中的數組是否是純數組。如果他們肯定,與貓鼬無關:) –

+0

夠公平的,我會刪除我的評論。 –