Как получить ArrayObject all value с помощью flatmap lodash - PullRequest
0 голосов
/ 08 июня 2018

У меня есть объект Array, и в этом объекте Array я хочу фильтровать данные, группировать данные по определенному ключу и объект Array.

    var data = [{
                'value': [{
                    'id': '1',
                    'list': [
                        { 'name': 'test', 'mapp_id': 1 },
                        { 'name': 'test1', 'mapp_id': 1 },
                        { 'name': 'test2', 'mapp_id': 1 },
                        { 'name': 'test3', 'mapp_id': 2 }
                    ]
                }, {
                    'id': '2',
                    'list': [
                        { 'name': 'test4', 'mapp_id': 2 },
                        { 'name': 'test5', 'mapp_id': 2 },
                        { 'name': 'test6', 'mapp_id': 2 },
                        { 'name': 'test7', 'mapp_id': 1 }
                    ]
                }

                ]
            },{
                'value': [{
                    'id': '3',
                    'list': [
                        { 'name': 'test8', 'mapp_id': 3 },
                        { 'name': 'test9', 'mapp_id': 3 },
                        { 'name': 'test10', 'mapp_id': 1 },
                        { 'name': 'test11', 'mapp_id': 1 }
                    ]
                }, {
                    'id': '4',
                    'list': [
                        { 'name': 'test12', 'mapp_id': 1 },
                        { 'name': 'test13', 'mapp_id': 1 },
                        { 'name': 'test14', 'mapp_id': 2 },
                        { 'name': 'test14', 'mapp_id': 2 }
                    ]
                }

                ]
            }]

я хочу, чтобы данные были похожи, а какой-то код пытался, но нетполный успех, некоторый успех.

    var output = {
                '1': [
                          { 'name': 'test', 'mapp_id': 1 ,'id': '1'},
                          { 'name': 'test1', 'mapp_id': 1 ,'id': '1'},
                          { 'name': 'test2', 'mapp_id': 1 ,'id': '1'},
                          { 'name': 'test7', 'mapp_id': 1 ,'id': '2'},
                          { 'name': 'test10', 'mapp_id': 1, 'id': '3' },
                          { 'name': 'test11', 'mapp_id': 1, 'id': '3' },
                          { 'name': 'test12', 'mapp_id': 1,'id': '4' },
                          { 'name': 'test13', 'mapp_id': 1 ,'id': '4'}
                     ],
                '2': [
                          { 'name': 'test3', 'mapp_id': 2 ,'id': '1'}, 
                          { 'name': 'test4', 'mapp_id': 2,'id': '2' },
                          { 'name': 'test5', 'mapp_id': 2 ,'id': '2'},
                          { 'name': 'test6', 'mapp_id': 2,'id': '2' }, 
                          { 'name': 'test14', 'mapp_id': 2 ,'id': '4'},
                          { 'name': 'test14', 'mapp_id': 2 ,'id': '4'}
                ],
                '3':[ 
                          { 'name': 'test8', 'mapp_id': 3 ,'id': '4'},
                          { 'name': 'test9', 'mapp_id': 3 ,'id': '4'}
                    ]

            };

Библиотека lodash, использованная в ее документации, ссылается на https://lodash.com/docs/4.17.10

Я могу попробовать некоторый код и этот код после удара, но без полного успеха.

var result= _.flatMap(data, item => 
        _(item.value)
        .flatMap('list')
        .value()
        );
result=_.groupBy(result, function(b) { return b.mapp_id})

и мой код опубликован

output = {
            '1': [
                      { 'name': 'test', 'mapp_id': 1 },
                      { 'name': 'test1', 'mapp_id': 1 },
                      { 'name': 'test2', 'mapp_id': 1 },
                      { 'name': 'test7', 'mapp_id': 1 },
                      { 'name': 'test10', 'mapp_id': 1 },
                      { 'name': 'test11', 'mapp_id': 1 },
                      { 'name': 'test12', 'mapp_id': 1 },
                      { 'name': 'test13', 'mapp_id': 1 }
                 ],
            '2': [
                      { 'name': 'test3', 'mapp_id': 2 }, 
                      { 'name': 'test4', 'mapp_id': 2 },
                      { 'name': 'test5', 'mapp_id': 2 },
                      { 'name': 'test6', 'mapp_id': 2 }, 
                      { 'name': 'test14', 'mapp_id': 2 },
                      { 'name': 'test14', 'mapp_id': 2 }
            ],
            '3':[ 
                      { 'name': 'test8', 'mapp_id': 3 },
                      { 'name': 'test9', 'mapp_id': 3 }
                ]

        };

помогите мне, ребята, как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Вы можете реализовать функцию flatMap для возврата идентификатора с каждым элементом, например

var result= _.flatMap(data, item => {
       return  _(item.value)
        .flatMap(function(value){
            return value.list.map(obj => ({...obj, id: value.id}));
         }).value()
        }
);

var data = [{
                'value': [{
                    'id': '1',
                    'list': [
                        { 'name': 'test', 'mapp_id': 1 },
                        { 'name': 'test1', 'mapp_id': 1 },
                        { 'name': 'test2', 'mapp_id': 1 },
                        { 'name': 'test3', 'mapp_id': 2 }
                    ]
                }, {
                    'id': '2',
                    'list': [
                        { 'name': 'test4', 'mapp_id': 2 },
                        { 'name': 'test5', 'mapp_id': 2 },
                        { 'name': 'test6', 'mapp_id': 2 },
                        { 'name': 'test7', 'mapp_id': 1 }
                    ]
                }

                ]
            },{
                'value': [{
                    'id': '3',
                    'list': [
                        { 'name': 'test8', 'mapp_id': 3 },
                        { 'name': 'test9', 'mapp_id': 3 },
                        { 'name': 'test10', 'mapp_id': 1 },
                        { 'name': 'test11', 'mapp_id': 1 }
                    ]
                }, {
                    'id': '4',
                    'list': [
                        { 'name': 'test12', 'mapp_id': 1 },
                        { 'name': 'test13', 'mapp_id': 1 },
                        { 'name': 'test14', 'mapp_id': 2 },
                        { 'name': 'test14', 'mapp_id': 2 }
                    ]
                }

                ]
            }]
var result= _.flatMap(data, item => {
       return  _(item.value)
        .flatMap(function(value){
            return value.list.map(obj => ({...obj, id: value.id}));
         }).value()
        }
);
result=_.groupBy(result, function(b) { return b.mapp_id})
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
0 голосов
/ 08 июня 2018

Вы можете связать flatMap для вложенных свойств, а затем сгруппировать плоские данные.

var data = [{ value: [{ id: '1', list: [{ name: 'test', mapp_id: 1 }, { name: 'test1', mapp_id: 1 }, { name: 'test2', mapp_id: 1 }, { name: 'test3', mapp_id: 2 }] }, { id: '2', list: [{ 'name': 'test4', mapp_id: 2 }, { 'name': 'test5', mapp_id: 2 }, { 'name': 'test6', mapp_id: 2 }, { 'name': 'test7', mapp_id: 1 }] }] }, { value: [{ id: '3', list: [{ name: 'test8', mapp_id: 3 }, { name: 'test9', mapp_id: 3 }, { name: 'test10', mapp_id: 1 }, { name: 'test11', mapp_id: 1 }] }, { id: '4', list: [{ name: 'test12', mapp_id: 1 }, { name: 'test13', mapp_id: 1 }, { name: 'test14', mapp_id: 2 }, { name: 'test14', mapp_id: 2 }] }] }],
    result = _(data)
        .flatMap('value')
        .flatMap('list')
        .groupBy('mapp_id')
        .value();

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>
...