首页 > 解决方案 > 具有对象数组的深度展平嵌套数组

问题描述

我需要有关展平包含对象数组的数组的帮助。

我用 flat() 试试运气,lodash flatten,但无济于事

Example: -
[
  [
    {
      name : 'a'
    },
    {
      name : 'b'
    }
   ],
   [
    {
      name : 'c'
    },
    {
      name : 'd'
    }
   ]
] 

这是代码: - 我在 for 循环中使用Promise.all()而不是普通请求,我得到 JSON 数据数组,所有已解析的 Promise 都被推送到一个数组中,从而创建带有 JSON 对象数组的嵌套数组

const request = require('request-promise')
var fs = require('fs');
let ps = []
let i,n
var requests = require("request");
var _ = require('lodash')
// var options = {
//   method: 'GET',
//   url: 'http://api.github.com/orgs/samsung',
//   headers:
//   {
//     'cache-control': 'no-cache',
//     Connection: 'keep-alive',
//     Referer: 'http://api.github.com/orgs/samsung',
//     'Accept-Encoding': 'gzip : true, deflate',
//     Cookie: '_octo=GH1.1.1825524242.1563990727; logged_in=no',
//     'Postman-Token': '3a69f2c3-5762-478a-8178-7d7fef971c1a,38ad48f7-291f-43eb-be81-286d433d8928',
//     'Cache-Control': 'no-cache',
//     Accept: '*/*',
//     Authorization: 'Basic U2lkZGhhbnRCb2hyYTpjaHJvbWl1bTM2MA==',
//     'User-Agent': 'PostmanRuntime/7.15.2'
//   },
//   json: true
// };


// requests(options,(error ,response,body) =>{
//   console.log(body)
//   n = body.public_repos
//   if (n % 100 == 0) {
//     n = n / 100
//     console.log('size',n)
//   }
//   else {
//     n = parseInt((n / 100) + 1)
//     console.log('size',n)
//   }
//  })

  for (i = 0; i < 2; i++) {
    var val = {
      method: 'GET',
      url: `https://api.github.com/orgs/samsung/repos`,
      qs: { per_page: '100', page: i.toString() },
      headers:
      {
        'cache-control': 'no-cache',
        Connection: 'keep-alive',
        'Accept-Encoding': 'gzip : true',
        Cookie: '_octo=GH1.1.1825524242.1563990727; logged_in=no',
        Host: 'api.github.com',
        'Postman-Token': 'db984097-df9c-4140-b98a-f9f70c135dbe,4bd1ce88-2405-40b2-8be9-87de92978ccf',
        'Cache-Control': 'no-cache',
        Accept: '*/*',
        'User-Agent': 'PostmanRuntime/7.15.2',
        Authorization: 'Basic U2lkZGhhbnRCb2hyYTpjaHJvbWl1bTM2MA=='
      },
    };
    ps.push(request(val))
  };
  // request(options).then(response => {
  //     let data = JSON.parse(response)
  //   //  res.send(JSON.parse(response));
  // }).catch(err =>{
  //     res.send(err);
  // })

Promise.all(ps).then( result => {
  console.log(result.length)
  if (Array.isArray(result)) {
    console.log("We got an array")
    // for(let l = 0; l < result.length;l++)
    // {
    //   for(let m = 0; m < result[l][0].length; m++)
    //   {
    //     data.push(result[l][m])
    //   }
    // }
     data = result.flat(2)
  }
  fs.writeFile('./output.json', data, 'utf-8', error => {
    console.log('file is ready')
  })

}).catch(err => {
  console.log(err)
})

我尝试了 flat() 和 lodash-flatten,在将内容写入文件后仍然得到同样的结果

点击此处下载文件

标签: javascript

解决方案


flat():参数

depth | Optional

指定嵌套数组结构应该展平的深度级别。默认为 1。

您可以指定要展平数组的深度:

var arr = [
  [
    {
      name : 'a'
    },
    {
      name : 'b'
    }
   ],
   [
    {
      name : 'c'
    },
    {
      name : 'd'
    }
   ]
];
var res = arr.flat(2);
console.log(res);


推荐阅读