Переменная объекта lodash groupBy - PullRequest
0 голосов
/ 01 марта 2019

У меня есть объект, который выглядит примерно так:

[
    {
        school: { name:"school1" state: {name:"washington" stateNr: 3} }
        nrOfStudents: 100
    },
    {
        school: { name:"school2" state: {name:"alaska" stateNr: 49} }
        nrOfStudents: 20
    },
    {
        school: { name:"school3" state: {name:"Texas" stateNr: 46} }
        nrOfStudents: 50
    },
    {
        school: { name:"school4" state: {name:"Texas" stateNr: 46} }
        nrOfStudents: 150
    }
]

И я хочу сгруппировать их по названию состояния.

[
    {
        stateName: "Texas";
        schools: [        
                     {
                          school: { name:"school4" state: {name:"Texas" stateNr: 46} }
                          nrOfStudents: 150
                     },
                     {
                          school: { name:"school3" state: {name:"Texas" stateNr: 46} }
                          nrOfStudents: 50
                     }
                  ]
    },
    {
        stateName: "Alaska"
        schools: [
                     {
                         school: { name:"school2" state: {name:"alaska" stateNr: 49} }
                         nrOfStudents: 20
                      }
                  ]
     }

and so on....

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

1 Ответ

0 голосов
/ 01 марта 2019

Используйте lodash _.flow(), чтобы создать функцию, которая группирует по имени государства, а затем отображает группы в нужную форму:

const getSchoolByState = _.flow(
  arr => _.groupBy(arr, 'school.state.name'),
  groups => _.map(groups, (schools, stateName) => ({
    stateName,
    schools
  }))
)

const data = [{"school":{"name":"school1","state":{"name":"washington","stateNr":3}},"nrOfStudents":100},{"school":{"name":"school2","state":{"name":"alaska","stateNr":49}},"nrOfStudents":20},{"school":{"name":"school3","state":{"name":"Texas","stateNr":46}},"nrOfStudents":50},{"school":{"name":"school4","state":{"name":"Texas","stateNr":46}},"nrOfStudents":150}]

const result = getSchoolByState(data)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
...