2017-07-19 6 views
0

私は "for for"ステートメントの使用に何か迷っていると思います。 私はJSON文書は(+マングースnodejs)MongoDBのクエリから返されてきた、彼の構造は、次のようなものです:"in"ステートメント(NodeJS)の奇妙な振る舞い

cicle私は各ドキュメントを取得し、別のものに私が反復したい「のために」では
[{ 
    "_id":"596f2f2ffbf8ab12bc8e5ee7", 
    "date":"1500458799794", 
    "questionId":4249, 
    "__v":0, 
    "myArray":[ 
    "1234567", 
    "89", 
    "5678901" 
    ] 
    }, 
    { 
    "_id":"596f2f2ffbf8ab12bc8e5ee5", 
    "date":"1500458799795", 
    "questionId":4245, 
    "__v":0, 
    "myArray":[ 
    "1234565", 
    "5678905" 
    ] 
    }] 

配列 "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... ] 

:私は声明「のために」とそれを反復した場合、私は、クエリによって返された文書を反復していますかのように私は、他の間違ったものをたくさん受けます: ["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

を '使用のために...オブジェクトのプロパティ*だけでなく、配列内のhasOwnPropertyテストが必要だと思いますインディーズ。プロトタイプチェーン上に任意のものを含める。人々は通常、この方法でもうJavaScriptを書いていないので(ArrayをObjectとして扱う)、エラーが起こりにくい 'Array.prototype.map'と' Array.prototype.forEach'関数を部分的に使います。 –

答えて

2

はこれです。

私はあなたのいずれかのループで、古典的なループを使用するか、または*すべてを反復in`のための... myArray.forEach(function (element) {});

+0

私はそれが彼が記述している "間違ったもの"が何であるかによると思います。私はMongoose文書の配列が純粋な配列であるかどうかわかりません。彼らが確信しているなら、モンゴースとは関係ありません:) –

+0

十分に公正で、私は私のコメントを削除します。 –