【问题标题】:How do I turn 3 separate arrays into one array in NodeJs from Mongodb [duplicate]如何从 Mongodb [重复] 将 3 个单独的数组转换为 NodeJs 中的一个数组
【发布时间】:2021-08-20 11:59:40
【问题描述】:

因此,我正在使用 firebase 制作一个应用程序并将给定组的所有成员订阅到特定组主题,我需要创建一个函数来返回给定用户的所有组的数组。

我有一个 mongo 文件夹,它只返回“成员”、“管理员”或“所有者”字段包含其用户 ID 的所有组,例如我的是“9b8bcd57-06eb-471c-8910-c5b944d02431”。但是,返回您是所有者、管理员或成员的组的函数是单独的函数。

我对 NodeJs 还很陌生,还没有完全掌握 Promise。但是我在网上找到了一个例子

这是我尝试过的:


var p1 = new Promise ((resolve, reject) => { resolve( myMongo.retrieveDocuments('groups', { member: userId }) ) })
var p2 = new Promise ((resolve, reject) => { resolve( myMongo.retrieveDocuments('groups', { owner: userId }) ) })
var p3 = new Promise ((resolve, reject) => { resolve( myMongo.retrieveDocuments('groups', { admin: userId }) ) })

return Promise.all([p1, p2, p3])

}

这个 fetch 返回一个具有类似结构的数组。

{
[
    [
        {
            "_id": "60e8341fe765650015db561f",
            "groupName": "Club One",
            "owner": [
                "0bcbb92d-6276-4118-8576-9d5f5c4ed43b"
            ],
            "timestamp": 1625830382197,
            "premiumStatus": false,
            "member": [
                "f2171431-627e-47a3-a65f-4abf48d361b6",
                "9b8bcd57-06eb-471c-8910-c5b944d02431"
            ],
            "admin": [],
            "pending": [],
            "description": ""
        },
        {
            "_id": "6117beac025a040016655483",
            "groupName": "Club 2",
            "owner": [
                "c5c921b5-3ce7-450d-bf39-af027d07f5a2"
            ],
            "timestamp": 1628945997774,
            "premiumStatus": false,
            "member": [
                "9b8bcd57-06eb-471c-8910-c5b944d02431"
            ],
            "admin": [],
            "pending": []
        }
    ],
    [
        {
            "_id": "611e613e6d85ac0016f57e5d",
            "groupName": "People",
            "owner": [
                "9b8bcd57-06eb-471c-8910-c5b944d02431"
            ],
            "timestamp": 1629380919105,
            "premiumStatus": false,
            "member": [],
            "admin": [],
            "pending": []
        }
    ],
    [
        {
            "_id": "60f6dc43be54fb0015c16634",
            "groupName": "UCD",
            "owner": [
                "79154a25-d747-441f-a8e3-4f06a2fbdaac"
            ],
            "timestamp": 1626790968639,
            "premiumStatus": false,
            "member": [],
            "admin": [
                "2c7c2bc9-e1c3-4665-bcd9-2844fae6ac93",
                "f8b4c3b7-0df8-4a14-a1fb-41c363337653",
                "ea4d3222-caa2-40d5-80d8-54ce9a360c2b",
                "9b8bcd57-06eb-471c-8910-c5b944d02431"
            ],
            "pending": [],
            "description": "Diamond by 2022"
        },
        {
            "_id": "6116d1767e80f300166368e7",
            "groupName": "Club",
            "owner": [
                "91dfdca2-6c2e-4784-91ed-d8ad4ffd8e25"
            ],
            "timestamp": 1628885342939,
            "premiumStatus": false,
            "member": [],
            "admin": [
                "9b8bcd57-06eb-471c-8910-c5b944d02431"
            ],
            "pending": [],
            "description": "Ahhhhhhh"
        }
    ]
]

如你所见,这个函数将所有的 Promise 一起返回到一个大的父数组中。我的问题是我需要内部数组括号 ('[' & '],') 消失。我试过分裂。但我不确定它是否适用于节点,并且我已经搜索了这个站点和许多其他站点以寻找答案。到目前为止,我听说过一种叫做“扁平化数组”的方法,但还没有找到合适的例子。

总结一下。

这就是我所拥有的:

[
   [ thing1, thing2, thing3],
   [ thing4, thing5, thing6],
   [ thing7, thing8, thing9]
]

这就是我需要的:

[ thing1, thing2, thing3, thing4, thing5, thing6, thing7, thing8, thing9 ]

【问题讨论】:

  • 您可以通过展开阵列或使用 Array.prototype.flat 来展平阵列。
  • 相信你只想flatten an array of arrays。此外,我猜myMongo.retrieveDocuments 已经是一个Promise,所以你可以摆脱所有new Promise ((resolve, reject) => { resolve( 文学。你只是将一个 Promise 包装在另一个 Promise 中。

标签: javascript node.js arrays


【解决方案1】:

您需要 Array.prototype.flat(),它从节点 11 开始可用。

flat() 方法创建一个新数组,其中所有子数组元素递归地串联到指定深度。

默认的深度1,所以不需要传入这个参数。

Promise.all([p1, p2, p3]).then(nested_data => nested_data.flat());

【讨论】:

  • 是的或(await Promise.all(...)).flat()
猜你喜欢
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
  • 2019-03-20
  • 1970-01-01
  • 2014-05-20
  • 1970-01-01
  • 2017-07-23
相关资源
最近更新 更多