javascript - Lodash 按键对数组进行分组

标签 javascript node.js lodash

我有以下 JSON 结构:

{
    "list":[
        {
            "id":"7ccba2c3-e6df-4cb2-94b9-2f6320366ce0",
            "name":"List 1",
            "people":[
                {"id":"b6cb6317-8f89-4826-b60b-aa0ecf51b1af","name":"Person 1","mediaAccounts":[{"socialNetwork":"facebook"},{"socialNetwork":"twitter"}]},
                {"id":"f2620c63-37cc-45be-86e0-fff5d415e483","name":"Person 2","mediaAccounts":[{"socialNetwork":"twitter"},{"socialNetwork":"facebook"}]},
                {"id":"e8ccae28-6695-435b-ba61-dbf569e75665","name":"Person 3","mediaAccounts":[{"socialNetwork":"facebook"},{"socialNetwork":"twitter"}]}
            ]
        },
        {
            "id":"a2d1d55a-e6df-4cb2-94b9-000000011212",
            "name":"List 2",
            "people":[
                {"id":"b6cb6317-8f89-4826-b60b-aa0ecf51b1af","name":"Person 4","mediaAccounts":[{"socialNetwork":"facebook"},{"socialNetwork":"twitter"}]},
                {"id":"f2620c63-37cc-45be-86e0-fff5d415e483","name":"Person 5","mediaAccounts":[{"socialNetwork":"twitter"},{"socialNetwork":"facebook"}]},
                {"id":"e8ccae28-6695-435b-ba61-dbf569e75665","name":"Person 6","mediaAccounts":[{"socialNetwork":"facebook"},{"socialNetwork":"twitter"}]}
            ]
        }

    ]
}

我需要将人们分组到一个数组中,如下所示:

{

  "people": [
    {"id":"b6cb6317-8f89-4826-b60b-aa0ecf51b1af","name":"Person 1","mediaAccounts":[{"socialNetwork":"facebook"},{"socialNetwork":"twitter"}]},
    {"id":"f2620c63-37cc-45be-86e0-fff5d415e483","name":"Person 2","mediaAccounts":[{"socialNetwork":"twitter"},{"socialNetwork":"facebook"}]},
    {"id":"e8ccae28-6695-435b-ba61-dbf569e75665","name":"Person 3","mediaAccounts":[{"socialNetwork":"facebook"},{"socialNetwork":"twitter"}]},
    {"id":"b6cb6317-8f89-4826-b60b-aa0ecf51b1af","name":"Person 4","mediaAccounts":[{"socialNetwork":"facebook"},{"socialNetwork":"twitter"}]},
    {"id":"f2620c63-37cc-45be-86e0-fff5d415e483","name":"Person 5","mediaAccounts":[{"socialNetwork":"twitter"},{"socialNetwork":"facebook"}]},
    {"id":"e8ccae28-6695-435b-ba61-dbf569e75665","name":"Person 6","mediaAccounts":[{"socialNetwork":"facebook"},{"socialNetwork":"twitter"}]}

  ]

}

使用下划线groupBy函数,返回值保持不变。

有人知道如何对上面的内容进行分组吗?

提前致谢。

最佳答案

您可以使用Array.flatMap() (或 lodash 的 _.flatMap() )将人员列表展平为单个数组:

const data = {"list":[{"id":"7ccba2c3-e6df-4cb2-94b9-2f6320366ce0","name":"List 1","people":[{"id":"b6cb6317-8f89-4826-b60b-aa0ecf51b1af","name":"Person 1","mediaAccounts":[{"socialNetwork":"facebook"},{"socialNetwork":"twitter"}]},{"id":"f2620c63-37cc-45be-86e0-fff5d415e483","name":"Person 2","mediaAccounts":[{"socialNetwork":"twitter"},{"socialNetwork":"facebook"}]},{"id":"e8ccae28-6695-435b-ba61-dbf569e75665","name":"Person 3","mediaAccounts":[{"socialNetwork":"facebook"},{"socialNetwork":"twitter"}]}]},{"id":"a2d1d55a-e6df-4cb2-94b9-000000011212","name":"List 2","people":[{"id":"b6cb6317-8f89-4826-b60b-aa0ecf51b1af","name":"Person 4","mediaAccounts":[{"socialNetwork":"facebook"},{"socialNetwork":"twitter"}]},{"id":"f2620c63-37cc-45be-86e0-fff5d415e483","name":"Person 5","mediaAccounts":[{"socialNetwork":"twitter"},{"socialNetwork":"facebook"}]},{"id":"e8ccae28-6695-435b-ba61-dbf569e75665","name":"Person 6","mediaAccounts":[{"socialNetwork":"facebook"},{"socialNetwork":"twitter"}]}]}]}

const result = {
  people: data.list.flatMap(o => o.people)
}

console.log(result)

关于javascript - Lodash 按键对数组进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59847346/

相关文章:

node.js - 查找具有通配符匹配的文件

javascript - Lodash 递归删除项目

node.js - 如何为在本地主机 :3000 上运行的 Create-React-App 设置通过 NGINX 的代理

javascript - 使用从 PHP 脚本获取的 Javascript 数组

javascript - 为什么在使用 babel-loader 时 Object.assign() 需要一个 polyfill?

c# - 带有鼠标悬停的列标题的 gridView 定义

node.js - 机器人对话框未启动

javascript - 在数组中添加对象的属性并通过lodash获取单个对象

javascript - 尝试使用 Lodash 返回深层嵌套对象

javascript - 尝试学习函数式混合