我正在尝试访问数组中特定键(_id)的所有值。 我的阵列:
"users" : [
{ "_id" : "LqTE6we2TYaA3v23K" },
{ "_id" : "knfoWfpn5Y9niSgae" },
{ "_id" : "NkHWuyRCpxCvCHJcA" },
{ "_id" : "YQF6BaCA9Xc8aaYTY" },
{ "_id" : "mceWvJgGfpH3XB4mh" },
{ "_id" : "zAWoF3BiLpAAv4vmP" },
{ "_id" : "c4fLw7TfkGu9jdbFT" }
]
我想要这个:
[ 'LqTE6we2TYaA3v23K', 'knfoWfpn5Y9niSgae', 'NkHWuyRCpxCvCHJcA', …]
是否有可能在没有循环数组的情况下实现这一目标? 任何帮助将不胜感激。
答案 0 :(得分:1)
map
已添加到第5版的ECMA-262标准中,所以不久前。
此外,性能不是最好的之一。
http://jsperf.com/map-vs-native-for-loop/2
所以,如果你想要表现&兼容性:
var array=[],l=users.length;
while(l--){array[l]=users[l]._id}
// now array contains your id's
更快,代码也不长。
while
循环是大多数浏览器中最快的push
快
醇>
<强>演示强>
map
的优点当然是它是基于新技术的内联函数,更易于阅读。
所以@Hatsjoem也是一个不错的选择。
答案 1 :(得分:0)
如上所述,根据您的问题标记,确实不确定您想要评论的内容。当然,所有JavaScript方法都涉及以某种形式“循环”,无论使用何种方法。
可能实际上意味着从MongoDB获取数据?嗯,你可以,我只是假设你实际上是在使用基于_id
值的Meteor,所以我正在使用该语法来调用聚合方法:
db.collection("collection").aggregate([
{ "$unwind": "$users" },
{ "$group": {
"_id": "$_id",
"users": { "$push": "$users._id" }
}}
])
这样,只需将特定_id
字段从数组中的文档中拉出来,然后将 $push
重新拉回到只包含这些值的数组中。因此,您可以发送响应,而无需从结果中“后处理”删除该_id
密钥。
因此,如果您确实在使用Meteor,那么您需要访问原始集合,而不仅仅是“Meteor集合”对象,它不能访问聚合方法。对于任何接近本机驱动程序的东西,无论你的正常语法是什么。