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