【发布时间】:2016-08-07 15:14:05
【问题描述】:
我有一个返回数组的 api(在 NODEJS 中)响应:
res.json(friends)
[
{
"id": 7795239,
"username": "janesmith"
},
{
"id": 1363327,
"username": "johnsmith"
}
]
但是当我想在发送此响应之前遍历数组时,我找不到执行此操作的方法。
users.length 不存在,for(var key users) 也不起作用。
如何解决?
编辑:获取数组的代码:
User.find({}, function(err, users){
if(err) res.send(err);
var friends;
var result = 'this will hold the result';
for(var key in users){
if(users[key].username == req.decoded.username) {
friends = users[key].friends;
}
}
// here I want to do things with the list of friends, so this is the place where I need to iterate over it
res.json(result);
});
这是users 和err 的日志结果
users:
[
{
"_id": "5710b02c7787794009325f62",
"username": "demouser",
"__v": 0,
"friends":
[
{
"username": "janesmith",
"id": 7795239
},
{
"username": "johnsmith",
"id": 1363327
}
]
}
]
err: null
这是钥匙的日志:
toObject
toJSON
items
db
discriminators
__v
id
_id
friends
password
username
userID
schema
collection
comparePassword
save
$__delta
$__version
increment
$__where
remove
model
$__buildDoc
init
$__storeShard
hook
pre
post
removePre
_lazySetupHooks
update
set
$__shouldModify
$__set
getValue
setValue
get
$__path
markModified
$__try
modifiedPaths
isModified
isDirectModified
isInit
isSelected
validate
invalidate
$__reset
$__dirty
$__setSchema
$__registerHooks
$__error
$__doQueue
$toObject
inspect
toString
equals
populate
populated
$__fullPath
domain
_events
_maxListeners
setMaxListeners
getMaxListeners
emit
addListener
on
once
removeListener
removeAllListeners
listeners
listenerCount
【问题讨论】:
-
你能发布一个演示来重现这个问题吗?
-
需要看更多代码才能回答。你能显示你分配数组的位置吗?
-
如果您将该 JSON(当然没有 res.json(users))解析为一个对象,那么您应该能够毫无问题地迭代其属性。
-
如果
users.length不存在,则它既不是数组也不是字符串。当您登录/检查users时会得到什么? -
console.log(err);和console.log(users);的结果是什么?
标签: javascript arrays json node.js