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

这是一个 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 可以很容易地做到这一点


湖上湖
浏览 292回答 1
1回答

红糖糍粑

使用_.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(&nbsp; _.flatMap('subdata'),&nbsp; _.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>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript