Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的读取数组_Javascript_Node.js_Mongoose - Fatal编程技术网

javascript中的读取数组

javascript中的读取数组,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,我是javascript新手,使用nodejs和mongoose查询来获得一个结果,我希望循环通过这个结果并在另一个数组中获得一些值 结果集看起来像 [ { _id: 5366e9049cfc825b32966852, companies: [ 5ab20bb69cb2754e949a09dc, 5ac5d53983d45353bc6a9c54, 5ac62eeca5421e4cb9abf63e] }, { _id: 5b9251f8ae8db624755

我是javascript新手,使用nodejs和mongoose查询来获得一个结果,我希望循环通过这个结果并在另一个数组中获得一些值

结果集看起来像

[ { _id: 5366e9049cfc825b32966852,
 companies:
     [ 5ab20bb69cb2754e949a09dc,
       5ac5d53983d45353bc6a9c54,
       5ac62eeca5421e4cb9abf63e]
},
{ _id: 5b9251f8ae8db624755f4b90,
 companies:
     [ 5b461c892bb9c81bd3ed4a25,
       5b5086196947782fbc873d28,
       5b76a6c79dc71a4a12564cc5 ]
}]
最后一个数组应该如下所示--

我的代码--

Model.find().exec(函数(err,gdoc){
如果(错误)
{
回调({err:err,消息:“查找公司时出错”});
}否则
{
对于(var i=0,len=gdoc.length;i
我得到了未定义的值


非常感谢您的帮助。提前谢谢。

您想要这样的东西:

var k=[{
_id:“5366e9049cfc825b32966852”,
公司:[“5ab20bb69cb2754e949a09dc”,
“5ac5d53983d45353bc6a9c54”,
“5ac62eeca5421e4cb9abf63e”
]
},
{
_id:“5b9251f8ae8db624755f4b90”,
公司:[“5b461c892bb9c81bd3ed4a25”,
“5b5086196947782fbc873d28”,
“5b76a6c79dc71a4a12564cc5”
]
}
];
var-res=[];
k、 forEach(函数(id){
资源推送(…id.公司)
});

控制台日志(res)
基本上,您正在尝试启用results数组的所有
company
字段。只要您知道关键是
公司
,这是一个简单的减少

与必须使用for循环相比,数组有两种内置方法,使得转换它们非常容易

Array.forEach()
Array.map()
Array.reduce()
Array.find()
是最常用的

//因为这些id也包含字母,所以它们必须是字符串。
常数数据=[
{
_id:“5366e9049cfc825b32966852”,
公司:[
“5ab20bb69cb2754e949a09dc”,
“5ac5d53983d45353bc6a9c54”,
“5ac62eeca5421e4cb9abf63e”
]
},
{
_id:“5b9251f8ae8db624755f4b90”,
公司:[
“5b461c892bb9c81bd3ed4a25”,
“5b5086196947782fbc873d28”,
“5b76a6c79dc71a4a12564cc5”
]
}
];
const companys=data.reduce((结果,项目)=>result.concat(项目,公司),[]);

控制台.日志(公司)您可以使用以下方法:

const-map=[…[].concat(…arr.map((o)=>o.companys))]

var arr=[{u id:“5366e9049cfc825b32966852”,
公司:
[“5ab20bb69cb2754e949a09dc”,
“5ac5d53983d45353bc6a9c54”,
“5ac62eeca5421e4cb9abf63e”]
},
{u id:“5b9251f8ae8db624755f4b90”,
公司:
[“5b461c892bb9c81bd3ed4a25”,
“5b5086196947782fbc873d28”,
“5b76a6c79dc71a4a12564cc5”]
}];
常量映射=[…[].concat(…arr.map((o)=>o.companys))]

控制台日志(map)在阵列上运行reduce怎么样

const模型=[{
_id:“5366e9049cfc825b32966852”,
公司:[
“5ab20bb69cb2754e949a09dc”,
“5ac5d53983d45353bc6a9c54”,
“5ac62eeca5421e4cb9abf63e”
]
},
{
_id:“5b9251f8ae8db624755f4b90”,
公司:[
“5b461c892bb9c81bd3ed4a25”,
“5b5086196947782fbc873d28”,
“5b76a6c79dc71a4a12564cc5”
]
}
];
常数减速机=(acc,值)=>{
acc.push(…价值公司);
返回acc;
};

log(model.reduce(reducer,[])
您得到未定义的
的原因是您试图访问
gdoc
上不存在的
公司
属性。您必须使用
gdoc[i].companys,而不是
gdoc.companys

您可以使用and代替循环,如下所示:

const gdoc=[
{
_id:'5366e9049cfc825b32966852',
公司:[
‘5ab20bb69cb2754e949a09dc’,
‘5ac5d53983d45353bc6a9c54’,
“5ac62eeca5421e4cb9abf63e”,
],
},
{
_id:'5b9251f8ae8db624755f4b90',
公司:[
“5b461c892bb9c81bd3ed4a25”,
“5b5086196947782fbc873d28”,
‘5b76a6c79dc71a4a12564cc5’,
],
},
];
const companys=[].concat(…gdoc.map(doc=>doc.companys));

控制台.日志(公司)你可以做这样的事情

var docs= [ { _id: "5366e9049cfc825b32966852",
 companies:
     [ "5ab20bb69cb2754e949a09dc",
       "5ac5d53983d45353bc6a9c54",
       "5ac62eeca5421e4cb9abf63e"]
},
{ _id: "5b9251f8ae8db624755f4b90",
 companies:
     [ "5b461c892bb9c81bd3ed4a25",
       "5b5086196947782fbc873d28",
       "5b76a6c79dc71a4a12564cc5" ]
}];
// your companies will be put in the folowing variable
var companies = [];

for ( var doc of docs){
    for (var item of doc.companies){
        companies.push(item)
    }
}

console.log(companies)
const data=[{{u id:'5366e9049cfc825b32966852',
公司:
[5ab20bb69cb2754e949a09dc',
‘5ac5d53983d45353bc6a9c54’,
“5ac62eeca5421e4cb9abf63e”]
},
{u id:'5b9251f8ae8db624755f4b90',
公司:
[5b461c892bb9c81bd3ed4a25',
“5b5086196947782fbc873d28”,
“5b76a6c79dc71a4a12564cc5”]
}]
让outputArr=[]
map(d=>outputArr.push(d.companys));
//压扁

console.log([].concat.apply([],outputArr))
循环缺少一个右括号。不是解决方案,只是saying@NimitkumarShah更新。这将返回一个数组,OP需要一个字符串数组。这不会返回一个数组数组,因为这三个点将公司数组分散为多个值,并且数组。push()接受多个参数。我的问题是,为什么要使用forEach()来模拟reduce()?太棒了。我唯一得到的是三个点下面的一个红色标记。然后我在我的编辑器中更改ES版本,一切正常。谢谢。
    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);
              }
          }
    });
var docs= [ { _id: "5366e9049cfc825b32966852",
 companies:
     [ "5ab20bb69cb2754e949a09dc",
       "5ac5d53983d45353bc6a9c54",
       "5ac62eeca5421e4cb9abf63e"]
},
{ _id: "5b9251f8ae8db624755f4b90",
 companies:
     [ "5b461c892bb9c81bd3ed4a25",
       "5b5086196947782fbc873d28",
       "5b76a6c79dc71a4a12564cc5" ]
}];
// your companies will be put in the folowing variable
var companies = [];

for ( var doc of docs){
    for (var item of doc.companies){
        companies.push(item)
    }
}

console.log(companies)