underscore.js를 사용하여 asc 및 descort를 수행하려면 어떻게 해야 합니까?
저는 현재 json 정렬에 언더스코어js를 사용하고 있습니다.이제 제가 부탁을 드렸습니다.ascending
그리고.descending
언더스코어.js를 사용하여 정렬합니다.저는 문서에 같은 내용이 보이지 않습니다.어떻게 하면 이것을 이룰 수 있을까요?
를 사용할 수 있습니다. 항상 오름차순 목록을 반환합니다.
_.sortBy([2, 3, 1], function(num) {
return num;
}); // [1, 2, 3]
그러나 .reverse 메서드를 사용하여 내림차순으로 설정할 수 있습니다.
var array = _.sortBy([2, 3, 1], function(num) {
return num;
});
console.log(array); // [1, 2, 3]
console.log(array.reverse()); // [3, 2, 1]
또는 숫자를 다룰 때 반환에 음의 부호를 추가하여 목록을 내림:
_.sortBy([-3, -2, 2, 3, 1, 0, -1], function(num) {
return -num;
}); // [3, 2, 1, 0, -1, -2, -3]
후드 아래에는 내장된 기능이 사용됩니다.
// Default is alphanumeric ascending:
[2, 3, 1].sort(); // [1, 2, 3]
// But can be descending if you provide a sort handler:
[2, 3, 1].sort(function(a, b) {
// a = current item in array
// b = next item in array
return b - a;
});
밑줄을 이용한 내림차순은 반환값에 -1을 곱하면 됩니다.
//Ascending Order:
_.sortBy([2, 3, 1], function(num){
return num;
}); // [1, 2, 3]
//Descending Order:
_.sortBy([2, 3, 1], function(num){
return num * -1;
}); // [3, 2, 1]
숫자가 아닌 문자열로 정렬하는 경우 charCodeAt() 메서드를 사용하여 유니코드 값을 가져올 수 있습니다.
//Descending Order Strings:
_.sortBy(['a', 'b', 'c'], function(s){
return s.charCodeAt() * -1;
});
Array 프로토타입의 역방향 메서드는 배열을 수정하고 참조를 반환하므로 다음 작업을 수행할 수 있습니다.
var sortedAsc = _.sortBy(collection, 'propertyName');
var sortedDesc = _.sortBy(collection, 'propertyName').reverse();
또한 밑줄 문서에는 다음과 같은 내용이 있습니다.
또한 배열 프로토타입의 메소드는 체인으로 연결된 언더스코어 개체를 통해 프록시 처리되므로,
reverse
아니면.push
배열을 계속 수정할 수 있습니다.
그 말은 당신이 사용할 수 있다는 것을 의미합니다..reverse()
체인을 매는 동안:
var sortedDescAndFiltered = _.chain(collection)
.sortBy('propertyName')
.reverse()
.filter(_.property('isGood'))
.value();
언더스코어 라이브러리와 유사하게 매개 변수를 사용하여 정렬 순서를 결정하는 하나의 메서드 "orderBy"가 있는 'lodash'라는 또 다른 라이브러리가 있습니다.이렇게 사용하시면 됩니다.
_.orderBy('collection', 'propertyName', 'desc')
어떤 이유에서인지 웹사이트 문서에는 기록되어 있지 않습니다.
밑줄 믹스인
@emil_lundberg의 답변을 확장하면 언더스코어를 사용하여 애플리케이션에서 반복할 수 있는 일종의 정렬이라면 정렬을 위한 사용자 지정 함수를 만들 때 "믹스인"을 작성할 수도 있습니다.
예를 들어, 컨트롤러가 있거나 "ASC" 또는 "DESC"의 정렬 순서를 가진 정렬 결과를 볼 수 있습니다. 이 정렬을 전환하려면 다음과 같은 작업을 수행할 수 있습니다.
Mixin.js
_.mixin({
sortByOrder: function(stooges, prop, order) {
if (String(order) === "desc") {
return _.sortBy(stooges, prop).reverse();
} else if (String(order) === "asc") {
return _.sortBy(stooges, prop);
} else {
return stooges;
}
}
})
사용 예시
var sort_order = "asc";
var stooges = [
{name: 'moe', age: 40},
{name: 'larry', age: 50},
{name: 'curly', age: 60},
{name: 'July', age: 35},
{name: 'mel', age: 38}
];
_.mixin({
sortByOrder: function(stooges, prop, order) {
if (String(order) === "desc") {
return _.sortBy(stooges, prop).reverse();
} else if (String(order) === "asc") {
return _.sortBy(stooges, prop);
} else {
return stooges;
}
}
})
// find elements
var banner = $("#banner-message");
var sort_name_btn = $("button.sort-name");
var sort_age_btn = $("button.sort-age");
function showSortedResults(results, sort_order, prop) {
banner.empty();
banner.append("<p>Sorting: " + prop + ', ' + sort_order + "</p><hr>")
_.each(results, function(r) {
banner.append('<li>' + r.name + ' is '+ r.age + ' years old.</li>');
})
}
// handle click and add class
sort_name_btn.on("click", function() {
sort_order = (sort_order === "asc") ? "desc" : "asc";
var sortedResults = _.sortByOrder(stooges, 'name', sort_order);
showSortedResults(sortedResults, sort_order, 'name');
})
sort_age_btn.on('click', function() {
sort_order = (sort_order === "asc") ? "desc" : "asc";
var sortedResults = _.sortByOrder(stooges, 'age', sort_order);
showSortedResults(sortedResults, sort_order, 'age');
})
이를 보여주는 JSFiddle: JSFiddle for SortBy Mixin
첫 번째 반복에서 역순을 가질 수 있습니다.
_.sortBy([2, 3, 1], num => -num )
언급URL : https://stackoverflow.com/questions/15137948/how-can-i-do-an-asc-and-desc-sort-using-underscore-js
'programing' 카테고리의 다른 글
Swift에서 get과 set은 무엇입니까? (0) | 2023.10.01 |
---|---|
단위 테스트와 자동 테스트의 차이점은 무엇입니까? (0) | 2023.10.01 |
PHP 엔티티 클래스 생성기 (0) | 2023.10.01 |
자바스크립트로 User Agent 가져오기 (0) | 2023.10.01 |
Swift - 여러 기준을 가진 객체 배열 정렬 (0) | 2023.10.01 |