Как отсортировать различные массивы объектов внутри массива - PullRequest
0 голосов
/ 12 мая 2019

Как отдельно отсортировать 2 массива объектов внутри массива? Нужно решение с Lodash. Спасибо.

Пример массива для сортировки по году:

var objects = [[{
      year: 2010,
      name: "john",
      value: 30
    },
    {
      year: 2009,
      name: "john",
      value: 40
    }
  ],
  [{
      year: 2018,
      name: "bob",
      value: 40
    },
    {
      year: 2015,
      name: "bob",
      value: 30
    }]]

Желаемый результат после сортировки по году:

[[{
      year: 2009,
      name: "john",
      value: 40
    },
    {
      year: 2010,
      name: "john",
      value: 30
    }
  ],
  [{
      year: 2015,
      name: "bob",
      value: 30
    },
    {
      year: 2018,
      name: "bob",
      value: 40
    }]]

Ответы [ 4 ]

2 голосов
/ 12 мая 2019

orderBy на каждую подгруппу должно хватить

var objects = [
[{
year: 2010,
name: "john", 
value: 30
},
{
year: 2009,
name: "john",
value: 40
}],
[{
year: 2018,
name: "bob", 
value: 40
},
{
year: 2015,
name: "bob",
value: 30
}]
]

console.log(objects.map(subObject => _.orderBy(subObject, "year")));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
1 голос
/ 12 мая 2019

Вы можете использовать map() для массива массивов и возвращать отсортированный массив в функции карты.

var arr = [[{year:2010,name:"john",value:30},{year:2009,name:"john",value:40}],[{year:2018,name:"bob",value:40},{year:2015,name:"bob",value:30}]];


const res = arr.map(x => x.slice().sort((a,b) => a.year - b.year));
console.log(res)
0 голосов
/ 12 мая 2019

Вы можете сгенерировать функцию с _.partialRight() и _.map() до _.sortBy() вложенными массивами:

const { partialRight: pr, map, sortBy } = _;

const sortSubArrays = pr(map, arr => sortBy(arr, 'year'));

const objects = [[{year:2010,name:"john",value:30},{year:2009,name:"john",value:40}],[{year:2018,name:"bob",value:40},{year:2015,name:"bob",value:30}]];

const output = sortSubArrays(objects);

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

Или используйте lodash / fp и сбросьте частичное право:

const { map, sortBy } = _;

const sortSubArrays = map(sortBy('year'));

const objects = [[{year:2010,name:"john",value:30},{year:2009,name:"john",value:40}],[{year:2018,name:"bob",value:40},{year:2015,name:"bob",value:30}]];

const output = sortSubArrays(objects);

console.log(output);
.as-console-wrapper { max-height: 100% !important; top: auto; }
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>
0 голосов
/ 12 мая 2019

Вам нужно отобразить массив и чем отсортировать его:

const objects = [
[{
year: 2010,
name: "john", 
value: 30
},
{
year: 2009,
name: "john",
value: 40
}],
[{
year: 2018,
name: "bob", 
value: 40
},
{
year: 2015,
name: "bob",
value: 30
}]
] 

const sorted = objects.map(r=>r.sort((a,b)=>a.year - b.year));

console.log(sorted)
...