Javascript “奇怪的行为”;在「;声明(NodeJS)
我想我在使用“for in”语句时遗漏了一些东西。 我有一个从mongoDB查询(nodejs+mongoose)返回的JSON文档,其结构如下: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" ] },
[{
"_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无关:)很公平,我将删除我的评论。