Search code examples
javascriptarrayslodash

How to groupBy in multi arrays using lodash


I want to group By sub-work in array

Here is my array I want to group By sub-work

 result =   [
        {
            "date": "10-07-2019",
            "data": [
                {
                    "data_id": "20",
                    "work": "work_1",
                    "sub-work": "sub_work1",
                    "sub-data": [
                        {
                            "id": 7,
                            "title": 'subdata-1',
                        }
                    ]
                }
            ]
        },
        {
            "date": "12-07-2019",
            "data": [
                {
                    "data_id": "20",
                    "work": "work_1",
                    "sub-work": "sub_work1",
                    "sub-data": [
                        {
                            "id": 7,
                            "title": 'subdata-1',
                        }
                    ]
                }
            ]
        },
    ]

Here is what I try

result = _(result)
            .map(function(items, data) {
                _.groupBy(items.data, function({ sub_work }) {
                    return sub_work;
                });
            })
            .value();

first I map result into data then I try to groupby but It's return null

Update

I want my output look like this

 [
    {
        "date": "10-07-2019",
        sub-work: [{
            sub-work : "sub_work1",
            sub-data[
                {
                     "id": 7,
                        "title": 'subdata-1',
                }
            ]
        }]
    }
]

...........................


Solution

  • It would be better if you could provide your expected result.

    Here's what I could infer:

    _(result)
        .map(function(obj) { // Convert into a 2D array.
            return obj.data.map(e => Object.assign(e, {date: obj.date})); 
        })
        .flatten() // We have an array of objects now.
        .groupBy('sub-work') // We can call groupBy().
        .value();
    

    Here's what you get:

    {
        "sub_work1": [{
            "data_id": "20",
            "work": "work_1",
            "sub-work": "sub_work1",
            "sub-data": [{
                "id": 7,
                "title": "subdata-1"
            }],
            "date": "10-07-2019"
        }, {
            "data_id": "20",
            "work": "work_1",
            "sub-work": "sub_work1",
            "sub-data": [{
                "id": 7,
                "title": "subdata-1"
            }],
            "date": "12-07-2019"
        }]
    }