繁体   English   中英

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

[英]how to group JSON objects from array of JSON objects?

这是一个 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()使用相同的方法生成 function:

 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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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