Более одной группировки в Лодаше - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть этот пример данных для группы

 [
            {
                heading: "pikachu",
                sideHeading: "yellow",
                subSideHeading: "electric",
                comment: "its a pokemon"
            },
            {
                heading: "pikachu",
                sideHeading: "yellow",
                subSideHeading: "rat",
                comment: "Ash pokemon"
            },
            {
                heading: "bulbasaur",
                sideHeading: "green",
                subSideHeading: "frog",
                comment: "Ash pokemon"
            },
            {
                heading: "pikachu",
                sideHeading: "ash",
                subSideHeading: "pet",
                comment: "not in pokeball"
            }
 ]

в поисках метода loda sh, который может дать мне такой вывод:

  [
        {
            heading:"pikachu",
            sideHeading:
            [
                {
                    sideHeading:"yellow",
                    subSideHeading:
                    [
                        {
                            subSideHeading: "electric",
                            comment: "its a pokemon"
                        },
                        {
                            subSideHeading: "rat",
                            comment: "Ash pokemon"
                        }
                    ]
                },
                {
                    sideHeading:"ash",
                    subSideHeading:[
                        {
                            subSideHeading: "pet",
                            comment: "not in pokeball"
                        }
                    ]
                }
            ]
        },
        {
            heading:"bulbasaur",
            sideHeading:
            [
                {
                    sideHeading:"green",
                    subSideHeading:
                    [
                        {
                            subSideHeading: "frog",
                            comment: "Ash pokemon"
                        }
                    ]
                }
            ]
        }
    ]

Я очень старался, ссылаясь на loda sh Документация и вопросы переполнения стека и использовали такие методы, как chain groupBy each map filter, но удача была не в мою пользу. Может кто-нибудь придумать решение, чтобы решить это или направить меня на правильный путь.

1 Ответ

0 голосов
/ 20 февраля 2020

Это не идеально, но это именно то, что вам нужно.

const data = [
  {
    heading: "pikachu",
    sideHeading: "yellow",
    subSideHeading: "electric",
    comment: "its a pokemon"
  },
  {
    heading: "pikachu",
    sideHeading: "yellow",
    subSideHeading: "rat",
    comment: "Ash pokemon"
  },
  {
    heading: "bulbasaur",
    sideHeading: "green",
    subSideHeading: "frog",
    comment: "Ash pokemon"
  },
  {
    heading: "pikachu",
    sideHeading: "ash",
    subSideHeading: "pet",
    comment: "not in pokeball"
  }
];

function getNested(dt, key, value, ...nestedArgs) {
  return _.chain(dt)
    .groupBy(key)
    .map((v, k) => {
      const nestedData = _.map(v, ({ [key]: kv, ...rest }) => rest);
      const [nextVal, ...restOfArgs] = nestedArgs;
    
      return {
        [key]: k,
        [value]: _.isNil(nextVal)
          ? nestedData
          : getNested.apply(null, [nestedData, value, nextVal].concat(restOfArgs))
      };
    })
    .value();
}
  
console.log(getNested(data, 'heading', 'sideHeading', 'subSideHeading'));

//console.log(group);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
...