Javascript 遍历猫鼬对象
我有一个Mongoose结果对象,我想循环使用它,但它的行为似乎与经典对象不同 通常,您不能使用循环遍历不可计算的属性,但这似乎在这里起作用。因此,虽然它应该循环使用与中的相同的属性,但这不适用于 此外,循环遍历每个属性(可枚举或不可枚举)的函数不会返回任何获取的值。我真的不明白这里发生了什么 下面是一些示例代码及其输出,以说明这一点:Javascript 遍历猫鼬对象,javascript,node.js,mongodb,loops,mongoose,Javascript,Node.js,Mongodb,Loops,Mongoose,我有一个Mongoose结果对象,我想循环使用它,但它的行为似乎与经典对象不同 通常,您不能使用循环遍历不可计算的属性,但这似乎在这里起作用。因此,虽然它应该循环使用与中的相同的属性,但这不适用于 此外,循环遍历每个属性(可枚举或不可枚举)的函数不会返回任何获取的值。我真的不明白这里发生了什么 下面是一些示例代码及其输出,以说明这一点: MediaModel.findById('558d0b3a5fa02e7e218b470c', function (err, media) { if (
MediaModel.findById('558d0b3a5fa02e7e218b470c', function (err, media) {
if (err) {
return console.error(err);
}
console.log(media);
console.log("\n --- \n");
console.log(Object.getOwnPropertyNames(media));
console.log("\n---\n");
for (var prop in media) {
console.log(prop + ' -- Enumerable : ' + media.propertyIsEnumerable(prop) + ' -- hasOwnProperty : ' + media.hasOwnProperty(prop) + "\n");
}
});
这将在控制台中显示输出:
{ _id: 558d0b3a5fa02e7e218b470c,
name: '54ae5d587860b4.61272171',
cover: true,
size: 144,
audio:
{ es: '54ae5ec1e31c68.83020900',
en: '54ae5ec240dd98.65329366',
fr: '54ae5ec2950737.15028179',
pt: '54ae5ec2e3bcf5.08479198',
ar: '54ae5ec33ab8f5.67860635',
ru: '54ae5ec393d300.66214842' },
comments: [] }
---
[ '$__',
'isNew',
'errors',
'_doc',
'$__original_save',
'save',
'_pres',
'_posts' ]
---
$__ -- Enumerable : true -- hasOwnProperty : true
isNew -- Enumerable : true -- hasOwnProperty : true
errors -- Enumerable : true -- hasOwnProperty : true
_doc -- Enumerable : true -- hasOwnProperty : true
$__original_save -- Enumerable : true -- hasOwnProperty : true
save -- Enumerable : true -- hasOwnProperty : true
_pres -- Enumerable : true -- hasOwnProperty : true
_posts -- Enumerable : true -- hasOwnProperty : true
db -- Enumerable : false -- hasOwnProperty : false
discriminators -- Enumerable : false -- hasOwnProperty : false
__v -- Enumerable : false -- hasOwnProperty : false
id -- Enumerable : false -- hasOwnProperty : false
_id -- Enumerable : false -- hasOwnProperty : false
comments -- Enumerable : false -- hasOwnProperty : false
size -- Enumerable : false -- hasOwnProperty : false
length -- Enumerable : false -- hasOwnProperty : false
cover -- Enumerable : false -- hasOwnProperty : false
imdbId -- Enumerable : false -- hasOwnProperty : false
imdbRating -- Enumerable : false -- hasOwnProperty : false
year -- Enumerable : false -- hasOwnProperty : false
actors -- Enumerable : false -- hasOwnProperty : false
writers -- Enumerable : false -- hasOwnProperty : false
director -- Enumerable : false -- hasOwnProperty : false
genre -- Enumerable : false -- hasOwnProperty : false
name -- Enumerable : false -- hasOwnProperty : false
schema -- Enumerable : false -- hasOwnProperty : false
collection -- Enumerable : false -- hasOwnProperty : false
$__handleSave -- Enumerable : false -- hasOwnProperty : false
$__delta -- Enumerable : false -- hasOwnProperty : false
$__version -- Enumerable : false -- hasOwnProperty : false
increment -- Enumerable : false -- hasOwnProperty : false
$__where -- Enumerable : false -- hasOwnProperty : false
remove -- Enumerable : false -- hasOwnProperty : false
model -- Enumerable : false -- hasOwnProperty : false
on -- Enumerable : false -- hasOwnProperty : false
once -- Enumerable : false -- hasOwnProperty : false
emit -- Enumerable : false -- hasOwnProperty : false
listeners -- Enumerable : false -- hasOwnProperty : false
removeListener -- Enumerable : false -- hasOwnProperty : false
setMaxListeners -- Enumerable : false -- hasOwnProperty : false
removeAllListeners -- Enumerable : false -- hasOwnProperty : false
addListener -- Enumerable : false -- hasOwnProperty : false
$__buildDoc -- Enumerable : false -- hasOwnProperty : false
init -- Enumerable : false -- hasOwnProperty : false
$__storeShard -- Enumerable : false -- hasOwnProperty : false
hook -- Enumerable : false -- hasOwnProperty : false
pre -- Enumerable : false -- hasOwnProperty : false
post -- Enumerable : false -- hasOwnProperty : false
removePre -- Enumerable : false -- hasOwnProperty : false
_lazySetupHooks -- Enumerable : false -- hasOwnProperty : false
update -- Enumerable : false -- hasOwnProperty : false
set -- Enumerable : false -- hasOwnProperty : false
$__shouldModify -- Enumerable : false -- hasOwnProperty : false
$__set -- Enumerable : false -- hasOwnProperty : false
getValue -- Enumerable : false -- hasOwnProperty : false
setValue -- Enumerable : false -- hasOwnProperty : false
get -- Enumerable : false -- hasOwnProperty : false
$__path -- Enumerable : false -- hasOwnProperty : false
markModified -- Enumerable : false -- hasOwnProperty : false
modifiedPaths -- Enumerable : false -- hasOwnProperty : false
isModified -- Enumerable : false -- hasOwnProperty : false
isDirectModified -- Enumerable : false -- hasOwnProperty : false
isInit -- Enumerable : false -- hasOwnProperty : false
isSelected -- Enumerable : false -- hasOwnProperty : false
validate -- Enumerable : false -- hasOwnProperty : false
validateSync -- Enumerable : false -- hasOwnProperty : false
invalidate -- Enumerable : false -- hasOwnProperty : false
$markValid -- Enumerable : false -- hasOwnProperty : false
$isValid -- Enumerable : false -- hasOwnProperty : false
$__reset -- Enumerable : false -- hasOwnProperty : false
$__dirty -- Enumerable : false -- hasOwnProperty : false
$__setSchema -- Enumerable : false -- hasOwnProperty : false
$__getArrayPathsToValidate -- Enumerable : false -- hasOwnProperty : false
$__getAllSubdocs -- Enumerable : false -- hasOwnProperty : false
$__registerHooksFromSchema -- Enumerable : false -- hasOwnProperty : false
$__handleReject -- Enumerable : false -- hasOwnProperty : false
$toObject -- Enumerable : false -- hasOwnProperty : false
toObject -- Enumerable : false -- hasOwnProperty : false
toJSON -- Enumerable : false -- hasOwnProperty : false
inspect -- Enumerable : false -- hasOwnProperty : false
toString -- Enumerable : false -- hasOwnProperty : false
equals -- Enumerable : false -- hasOwnProperty : false
populate -- Enumerable : false -- hasOwnProperty : false
execPopulate -- Enumerable : false -- hasOwnProperty : false
populated -- Enumerable : false -- hasOwnProperty : false
$__fullPath -- Enumerable : false -- hasOwnProperty : false
最后,我想通过media.audio
进行循环,但我不知道如何进行
它通过执行
var audio=(JSON.parse(JSON.stringify(media.audio)))工作然后在
中为…循环使用,但我觉得这不是正确的方法 我想你可以用:
var media = {
_id: '558d0b3a5fa02e7e218b470c',
name: '54ae5d587860b4.61272171',
cover: true,
size: 144,
audio: {
es: '54ae5ec1e31c68.83020900',
en: '54ae5ec240dd98.65329366',
fr: '54ae5ec2950737.15028179',
pt: '54ae5ec2e3bcf5.08479198',
ar: '54ae5ec33ab8f5.67860635',
ru: '54ae5ec393d300.66214842'
},
comments: []
};
for (var property in media.audio) {
if (media.audio.hasOwnProperty(property)) {
console.log(property);
}
}
嗯,这个问题并不新鲜,但这种情况仍然可能成为一种痛苦。您可以使用toJSON
或toObject
方法来获取正常的可编辑对象。就这样,
media = media.toJSON()
Object.keys(media.audio).forEach(...)
有关toJSON
antoObject
的详细信息,请参见这里的输出:$\uuuuuuuuuu是新错误
我曾尝试使用媒体
和media.audio不更改输出…我仍然无法循环通过媒体.audio
对象。您是否尝试循环通过媒体.audio.toObject()
对象?这非常有效!事实上,有一个例子可以解释这一点。然而,我如何在<代码>中获得不可计算的属性,因为<代码>媒体<代码>仍然是一个JS对象?这对你有帮助吗?在