繁体   English   中英

在javascript中读取数组

[英]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)) 

目前作为“ 实验技术 ”的flatMapflat都将在将来提供一种更清洁的方法来解决此问题。 看到:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM