code

lodash 다중 열 정렬 기준

starcafe 2023. 8. 6. 10:13
반응형

lodash 다중 열 정렬 기준

여러 속성을 기준으로 객체 배열을 정렬하는 훌륭한 방법이 있습니다.

var data = _.sortBy(array_of_objects, ['type', 'name']);

그러나 이는 오름차순 정렬에만 해당됩니다.열당 방향을 정의하는 유용한 방법이 있습니까?예.

var data = _.sortBy(array_of_objects, [{'type': 'asc'}, {'name': 'desc'}]);

lodash 3.5.0 이후에는 sortByOrder(v4.3.0에서 OrderBy로 이름 변경)를 사용할 수 있습니다.

var data = _.sortByOrder(array_of_objects, ['type','name'], [true, false]);

버전 3.10.0 이후에는 주문(asc, desc)에 표준 의미론을 사용할 수도 있습니다.

var data = _.sortByOrder(array_of_objects, ['type','name'], ['asc', 'desc']);

lodash 버전 4에서 이 방법은 orderBy로 이름이 변경되었습니다.

var data = _.orderBy(array_of_objects, ['type','name'], ['asc', 'desc']);

언제든지 사용할 수 있습니다.Array.prototype.reverse()

var data = _.sortBy(array_of_objects, ['type', 'name']).reverse();

필드 & 멀티 필드 & 다양한 방향으로 로다쉬 주문 > 4.

var sortedArray = _.orderBy(mixedArray,
                            ['foo','foo.bar','bar.foo.bar'],               
                            ['desc','asc','desc']);

특정 속성을 내림차순으로 정렬하려면 마지막에 단순히 .reverse()를 추가하지 않는 것이 좋습니다. 이렇게 하면 모든 정렬이 내림차순으로 수행되기 때문입니다.

특정 내림차순으로 정렬하려면 내림차순으로 정렬하고 각 내림차순으로 정렬할 때마다 .reverse()를 호출합니다.

var data = _(data).chain()
    .sort("date")
    .reverse()    // sort by date descending
    .sort("name") // sort by name ascending
    .result()

_의 정렬은 안정적인 정렬이므로 두 항목의 속성 값이 동일하면 순서가 유지되므로 안전하게 체인을 연결하고 역순 정렬할 수 있습니다.

더 많은 정보

버전 4.11.x의 설명서에서 "이 방법은 _.sortBy와 유사하지만 정렬 기준으로 반복되는 항목의 정렬 순서를 지정할 수 있습니다.순서를 지정하지 않으면 모든 값이 오름차순으로 정렬됩니다.그렇지 않으면 내림차순으로 "슬라이드"를 지정하거나 해당 값의 오름차순 정렬 순서로 "슬라이드"를 지정합니다. (소스 https://lodash.com/docs/4.17.10#orderBy)

let sorted = _.orderBy(this.items, ['fieldFoo', 'fieldBar'], ['asc', 'desc'])

열당 방향을 정의하는 유용한 방법이 있습니까?

값을 반전시키는 콜백 함수 이외에는 정렬 순서를 지정할 수 없습니다.다중 열 정렬의 경우에도 이 작업을 수행할 수 없습니다.

당신은 할 수 있을지도 모릅니다.

 _.each(array_of_objects, function(o) {
     o.typeDesc = -o.type; // assuming a number
 });
 _.sortBy(array_of_objects, ['typeDesc', 'name'])

다른 모든 것을 위해서, 당신은 원주민에게 의지해야 할 것입니다..sort()사용자 정의 비교 기능 포함:

 array_of_objects.sort(function(a, b) {
     return a.type - b.type // asc
         || +(b.name>a.name)||-(a.name>b.name) // desc
         || …;
 });

다음을 시도할 수도 있습니다.

var data= _.reverse(_.sortBy(res.locals.subscriptionList.items, ['type', 'name']));

언급URL : https://stackoverflow.com/questions/22928841/lodash-multi-column-sortby

반응형