首页 > 解决方案 > 在javascript中读取数组

问题描述

我是 javascript 新手,使用 nodejs 和 mongoose 查询来获得我想循环并在另一个数组中获取一些值的结果。

结果集看起来像

[ { _id: 5366e9049cfc825b32966852,
 companies:
     [ 5ab20bb69cb2754e949a09dc,
       5ac5d53983d45353bc6a9c54,
       5ac62eeca5421e4cb9abf63e]
},
{ _id: 5b9251f8ae8db624755f4b90,
 companies:
     [ 5b461c892bb9c81bd3ed4a25,
       5b5086196947782fbc873d28,
       5b76a6c79dc71a4a12564cc5 ]
}]

最终的数组应该看起来像——

 [ 5ab20bb69cb2754e949a09dc,
   5ac5d53983d45353bc6a9c54,
   5ac62eeca5421e4cb9abf63e,
   5b461c892bb9c81bd3ed4a25,
   5b5086196947782fbc873d28,
   5b76a6c79dc71a4a12564cc5]

我的代码——

    Model.find().exec(function(err,gdoc){
          if(err)
          {
             callback({err:err,message:"Error looking up company"});
          }else
          {
             for (var i = 0, len = gdoc.length; i < len; i++) {                    
                    console.log(gdoc.companies);
              }
          }
    });

我得到未定义的值。

非常感谢任何帮助。提前致谢。

标签: javascriptnode.jsmongoose

解决方案


你得到的原因undefined是你试图companies访问gdoc. 而不是gdoc.companies,您必须使用gdoc[i].companies.

您可以Array.prototype.concat展开语法 ( ...)一起使用,而不是循环,Array.prototype.map如下所示:

const gdoc = [
  {
    _id: '5366e9049cfc825b32966852',
    companies: [
      '5ab20bb69cb2754e949a09dc',
      '5ac5d53983d45353bc6a9c54',
      '5ac62eeca5421e4cb9abf63e',
    ],
  },
  {
    _id: '5b9251f8ae8db624755f4b90',
    companies: [
      '5b461c892bb9c81bd3ed4a25',
      '5b5086196947782fbc873d28',
      '5b76a6c79dc71a4a12564cc5',
    ],
  },
];

const companies = [].concat(...gdoc.map(doc => doc.companies));
console.log(companies);


推荐阅读