从数组中的特定键获取所有值 - JS

时间:2014-04-18 10:12:32

标签: javascript arrays mongodb

我正在尝试访问数组中特定键(_id)的所有值。 我的阵列:

"users" : [
    { "_id" : "LqTE6we2TYaA3v23K" },  
    { "_id" : "knfoWfpn5Y9niSgae" },
    { "_id" : "NkHWuyRCpxCvCHJcA" },  
    { "_id" : "YQF6BaCA9Xc8aaYTY" },  
    { "_id" : "mceWvJgGfpH3XB4mh" },  
    { "_id" : "zAWoF3BiLpAAv4vmP" },       
    { "_id" : "c4fLw7TfkGu9jdbFT" } 
]

我想要这个:

[ 'LqTE6we2TYaA3v23K', 'knfoWfpn5Y9niSgae', 'NkHWuyRCpxCvCHJcA', …]

是否有可能在没有循环数组的情况下实现这一目标? 任何帮助将不胜感激。

2 个答案:

答案 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

更快,代码也不长。

  1. while循环是大多数浏览器中最快的
  2. 如果您已有索引
  3. ,则直接设置数组索引也比push

    <强>演示

    http://jsfiddle.net/vmfju/

    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集合”对象,它不能访问聚合方法。对于任何接近本机驱动程序的东西,无论你的正常语法是什么。