Javascript “奇怪的行为”;在「;声明(NodeJS)

Javascript “奇怪的行为”;在「;声明(NodeJS),javascript,arrays,node.js,mongodb,for-in-loop,Javascript,Arrays,Node.js,Mongodb,For In Loop,我想我在使用“for in”语句时遗漏了一些东西。 我有一个从mongoDB查询(nodejs+mongoose)返回的JSON文档,其结构如下: [{ "_id":"596f2f2ffbf8ab12bc8e5ee7", "date":"1500458799794", "questionId":4249, "__v":0, "myArray":[ "1234567", "8901234", "5678901" ] },

我想我在使用“for in”语句时遗漏了一些东西。 我有一个从mongoDB查询(nodejs+mongoose)返回的JSON文档,其结构如下:

  [{  
  "_id":"596f2f2ffbf8ab12bc8e5ee7",
  "date":"1500458799794",
  "questionId":4249,
  "__v":0,
  "myArray":[  
     "1234567",
     "8901234",
     "5678901"
     ]
  },
  {  
  "_id":"596f2f2ffbf8ab12bc8e5ee5",
  "date":"1500458799795",
  "questionId":4245,
  "__v":0,
  "myArray":[  
     "1234565",
     "5678905"
     ]
  }]
在一个“for-In”循环中,我获取每个文档,并在另一个文档中迭代数组“myArray”。问题是当我尝试迭代数组“myArray”时。如果我用“for in”语句迭代它,我会收到很多其他错误的东西,比如如果我迭代查询返回的文档:

  [null,{},{"_id":"596f2f2ffbf8ab12bc8e5ee7","date":"1500458799794","questionId":4249,"__v":0,"myArray"["1234567","8901234","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”、“8901234”、“5678901”]

为什么?? 代码如下:

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

      for(var i=0;i<myArray.length;i++){
         console.log(myArray[i]);   //this print ["1234567","8901234","5678901"]
       }
       for(element in myArray){
          console.log(myArray[element]);   //this print a lot of wrong stuff!
       }
  }
for(数据中的问题){
var myArray=data[question].myArray;
console.log(JSON.stringify(myArray));//此打印[“1234567”、“8901234”、“5678901”]

对于(var i=0;i来说,这是因为Mongoose返回一个文档,所以您看到的属性是原型链上的那些属性


我认为您需要在for…in循环中进行
hasOwnProperty
测试,使用经典循环,或者使用
myArray.forEach(function(element){};

这是因为Mongoose返回一个文档,所以您看到的属性是原型链上的属性


我认为您需要在for…in循环中使用
hasOwnProperty
测试,使用经典循环,或者使用
myArray.forEach(函数(元素){};
for…in
迭代所有对象属性,而不仅仅是数组指示。包括原型链上的任何属性。人们通常不再以这种方式编写JavaScript(将数组视为对象)并使用不太容易出错的
Array.prototype.map
Array.prototype.forEach
函数,部分原因就在于此。
for…in迭代所有对象属性,而不仅仅是数组指示。包括原型链上的任何属性。人们通常不再以这种方式编写JavaScript(将数组视为对象)并使用不太容易出错的
Array.prototype.map
Array.prototype.forEach
函数,部分原因就在于此。我想这取决于什么是“错误的东西”这就是他所描述的。我不知道Mongoose文档中的数组是否是纯数组。如果他们确定,与Mongoose无关:)很公平,我会删除我的评论。我想这取决于什么是“错误的东西”这就是他描述的。我不知道Mongoose文档中的数组是否是纯数组。如果他们确定,与Mongoose无关:)很公平,我将删除我的评论。