태그 보관물: sorting

sorting

lodash 다중 열 정렬 배열을 정렬하는 멋진 방법이

여러 속성을 기반으로 객체 배열을 정렬하는 멋진 방법이 있습니다.

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

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

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


답변

현재 lodash 3.5.0 사용할 수 sortByOrder을 (개명 해 orderBy를 V4.3.0에서) :

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']);

에서 버전 4 lodash이 방법이 변경되었습니다 해 orderBy :

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

답변

당신은 항상 사용할 수 있습니다 Array.prototype.reverse()

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

답변

특정 속성을 내림차순으로 정렬하려면 끝에 모든 .reverse ()를 추가하지 않으려는 경우 모든 정렬이 내림차순으로 표시되므로주의해야합니다.

특정 정렬을 내림차순으로 만들려면 내림차순하려는 각 정렬 후에 .reverse ()를 호출하여 정렬을 가장 중요하지 않은 순서에서 가장 중요한 순서로 연결하십시오.

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

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

추가 정보


답변

딥 필드 및 멀티 필드 및 다른 방향 순서 Lodash> 4

var sortedArray = _.orderBy(mixedArray,
                            ['foo','foo.bar','bar.foo.bar'],
                            ['desc','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
         || …;
 });

답변

버전 4.11.x의 문서에서 다음과 같이 말합니다.` “이 방법은 _.sortBy와 유사합니다. 반복의 정렬 순서를 기준으로 정렬 할 수 있습니다. 순서를 지정하지 않으면 모든 값이 오름차순으로 정렬됩니다. , 내림차순은 “desc”, 해당 값의 오름차순 정렬은 “asc”순서를 지정하십시오. ” (출처 https://lodash.com/docs/4.17.10#orderBy )

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


답변

당신은 또한 이것을 시도 할 수 있습니다 :

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