javascript - 如何从 JSON 对象数组中对 JSON 对象进行分组?

标签 javascript node.js lodash

这是一个 JSON 对象数组,其中包含我想要分组的数组值(提取唯一值):

let myArray = [
    {
        "_id": "1",
        "subdata": [
            {
                "subid": "11",
                "name": "A"
            },
            {
                "subid": "12",
                "name": "B"
            }
        ]
    },
    {
        "_id": "2",
        "subdata": [
            {
                "subid": "12",
                "name": "B"
            },
            {
                "subid": "33",
                "name": "E"
            }
        ]
    }
]

最后我需要得到:

[
    {
        "subid": "11",
        "name": "A"
    },
    {
        "subid": "12",
        "name": "B"
    },
    {
        "subid": "33",
        "name": "E"
    }
]

我尝试过 lodash 但没有成功:

let newArray = lodash.uniqBy(lodash.concat(myArray, 'subdata.subid'), '_id');

当然,我可以一一扫描每个数组元素,但我认为使用 lodash 有简单的方法来做到这一点

最佳答案

使用_.flatMap()获取所有subdata项的数组,然后使用_.uniqueBy()subid:

const myArray = [{"_id":"1","subdata":[{"subid":"11","name":"A"},{"subid":"12","name":"B"}]},{"_id":"2","subdata":[{"subid":"12","name":"B"},{"subid":"33","name":"E"}]}];

const result = _.uniqBy(_.flatMap(myArray, 'subdata'), 'subid');

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>

使用 lodash/fp,您可以使用 _.flow() 使用相同的方法生成函数:

const fn = _.flow(
  _.flatMap('subdata'),
  _.uniqBy('subid')
);

const myArray = [{"_id":"1","subdata":[{"subid":"11","name":"A"},{"subid":"12","name":"B"}]},{"_id":"2","subdata":[{"subid":"12","name":"B"},{"subid":"33","name":"E"}]}];

const result = fn(myArray);

console.log(result);
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>

关于javascript - 如何从 JSON 对象数组中对 JSON 对象进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58984081/

相关文章:

javascript - 检测 _ 是 lodash 还是下划线

javascript - 如何使用洛达什

javascript - 编辑页面的 AngularJs 表单验证

javascript - IE9中如何检测浏览器模式是否在 "Internet Explorer 9 compatibility View"?

node.js - 使用我自己的数据库或 Google map API(或其他解决方案)实现城市地理编码?

javascript - 从 URL 解析 JSON 数据

javascript - 如何将多个标记添加到移动位置谷歌地图,Javascript

javascript - jQuery 并防止函数在双击超链接时执行两次

javascript - 新的 Node.js Express 项目在 Eclipse 中为空

angular - @types/lodash/common/array.d.ts(483,22) : error TS1005: ';'