[英]read array in 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);
}
}
});
我正在获得未定义的值。
非常感谢您的帮助。 提前致谢。
之所以变得undefined
是因为您尝试访问gdoc
上不存在的companies
属性。 取而代之的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);
基本上你想concat
enate所有company
的结果阵列的领域。 只要您知道关键是companies
,这就是一个简单的还原。
与必须使用for循环相比,数组具有一些内置方法,这些方法使转换它们非常容易。
Array.forEach()
, Array.map()
, Array.reduce()
和Array.find()
是最常用的。
// Since these id's contain letters as well, they need to be strings. const data = [ { _id: "5366e9049cfc825b32966852", companies:[ "5ab20bb69cb2754e949a09dc", "5ac5d53983d45353bc6a9c54", "5ac62eeca5421e4cb9abf63e" ] }, { _id: "5b9251f8ae8db624755f4b90", companies:[ "5b461c892bb9c81bd3ed4a25", "5b5086196947782fbc873d28", "5b76a6c79dc71a4a12564cc5" ] } ]; const companies = data.reduce(( result, item ) => result.concat( item.companies ), []); console.log( companies );
您可以使用以下方法:
const map = [...[].concat(...arr.map((o) => o.companies))]
var arr = [ { _id: "5366e9049cfc825b32966852", companies: [ "5ab20bb69cb2754e949a09dc", "5ac5d53983d45353bc6a9c54", "5ac62eeca5421e4cb9abf63e"] }, { _id: "5b9251f8ae8db624755f4b90", companies: [ "5b461c892bb9c81bd3ed4a25", "5b5086196947782fbc873d28", "5b76a6c79dc71a4a12564cc5" ] }]; const map = [...[].concat(...arr.map((o) => o.companies))] console.log(map);
如何在数组上运行化简。
const model = [{ _id: "5366e9049cfc825b32966852", companies: [ "5ab20bb69cb2754e949a09dc", "5ac5d53983d45353bc6a9c54", "5ac62eeca5421e4cb9abf63e" ] }, { _id: "5b9251f8ae8db624755f4b90", companies: [ "5b461c892bb9c81bd3ed4a25", "5b5086196947782fbc873d28", "5b76a6c79dc71a4a12564cc5" ] } ]; const reducer = (acc, value) => { acc.push(...value.companies); return acc; }; console.log(model.reduce(reducer, []));
你可以做这样的事情!
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 = [ { _id: '5366e9049cfc825b32966852', companies: [ '5ab20bb69cb2754e949a09dc', '5ac5d53983d45353bc6a9c54', '5ac62eeca5421e4cb9abf63e'] }, { _id: '5b9251f8ae8db624755f4b90', companies: [ '5b461c892bb9c81bd3ed4a25', '5b5086196947782fbc873d28', '5b76a6c79dc71a4a12564cc5' ] }] let outputArr = [] data.map(d => outputArr.push(d.companies)); //Flatten console.log([].concat.apply([],outputArr))
目前作为“ 实验技术 ”的flatMap和flat都将在将来提供一种更清洁的方法来解决此问题。 看到:
Array.prototype.flat() : https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
Array.prototype.flatMap() : https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap
您想要这样的东西:
var k = [{ _id: "5366e9049cfc825b32966852", companies: ["5ab20bb69cb2754e949a09dc", "5ac5d53983d45353bc6a9c54", "5ac62eeca5421e4cb9abf63e" ] }, { _id: "5b9251f8ae8db624755f4b90", companies: ["5b461c892bb9c81bd3ed4a25", "5b5086196947782fbc873d28", "5b76a6c79dc71a4a12564cc5" ] } ]; var res = []; k.forEach(function(id) { res.push(...id.companies) }); console.log(res);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.