Object.keys()返回集合中MongoDB对象上的意外键

在这里处理一个奇怪的问题。这是从mongodb中提取并传递给以下函数的对象数组。

我在forEach从数据库中拉出的阵列中依次尝试了以下3个日志:

  • e(数组中的object元素)可以正确返回。如您所见,所有属性(键)都存在:

    { paid: false,

    hotelWebsite: 'www.testing.com’,

    _id:5951848a24bb261eed09d638,

    hotelAddress: ‘123 easy street’,

    …etc }

  • console.log(Object.keys(e)) 返回不是关键的东西…

    [ ‘’,

    ‘isNew’,

    ‘errors’,

    ‘_doc’,

    ‘$init’ ]

  • 最后:

    for(key in e){

    console.log(key);

    }

它返回绝对的数据混乱,其中的一部分包含对象的实际键:

__parentArray

__parent

__index

$__

isNew

errors

_doc

$init

id

_id

hotelWebsite

hotelAddress

hotelNumber

hotelName

courseCost

courseDate

courseState

courseCity

courseName

paid

studentComments

studentEmail

studentPhone

studentCountry

studentZip

studentState

studentCity

studentAddress

studentCompany

studentName

schema

constructor

$__original_remove

remove

_pres

_posts

$__original_validate

validate

toBSON

markModified

populate

save

update

inspect

invalidate

$markValid

$isValid

ownerDocument

$__fullPath

parent

parentArray

on

once

emit

listeners

removeListener

setMaxListeners

removeAllListeners

addListener

$__buildDoc

init

$hook

$pre

$post

removePre

removePost

_lazySetupHooks

set

$__shouldModify

$__set

getValue

setValue

get

$__path

unmarkModified

$ignore

modifiedPaths

isModified

$isDefault

isDirectModified

isInit

isSelected

isDirectSelected

$__validate

validateSync

$__reset

$__dirty

$__setSchema

$__getArrayPathsToValidate

$__getAllSubdocs

$__handleReject

$toObject

toObject

toJSON

toString

equals

execPopulate

populated

depopulate

以及相关代码示例(如果需要):

studentsArray.forEach( (e, i) => {

if(task === 'nameTag'){

console.log(e);

console.log(Object.keys(e));

for(k in e){

console.log(k);

}

}

....

我需要访问属性(键)以在forEach函数中进行进一步处理。我对造成这种情况的原因非常困惑,并且从未遇到过此类问题。为了记录该对象存在,使用console.log(typeof

e)它是一个对象(不是数据“字符串”)。我可以使用点或括号符号访问属性,但不能使用Object.keys()for (keys in obj)

谁能帮我解决这个问题?

回答:

for ... in迭代所有拥有和 继承的可枚举

属性。这不是“奇怪的错误”,实际上这是预期的行为。 __

至于Object.keys(),除非它被不兼容的实现覆盖,否则实际上它们是对象本身的可枚举键,因此您很可能会弄错。该e对象.toJSON()在其原型中有一个方法,当您执行此操作时会隐式调用该方法console.log(e),因此该方法可能是您在此处看到的输出,并且不太可能反映出与原始对象完全相同的属性键。尝试调用console.log(e.toJSON()),我想它将与第一个输出相同。

如果只需要对象自身的属性,请使用Object.getOwnPropertyNames(e)

如果要在第一个输出中打印键,请使用Object.keys(e.toJSON())

以上是 Object.keys()返回集合中MongoDB对象上的意外键 的全部内容, 来源链接: utcz.com/qa/407354.html

回到顶部