2013-06-13 2 views
1
I는 다음과 같이 그 일을 현재 정렬 그리고 아이오와 많이하고 있어요

:자바 스크립트 정렬 JQuery와

someArray.sort(function (a, b) { return sortby(a, b, 'propertyname') }); 

하지만 더 영리한 뭔가를 할 수 있습니다 의심 :

function sortby(a, b, prop) { 
    if (a[prop].toLowerCase() > b[prop].toLowerCase()) 
     return 1; 
    else 
     return -1 
} 

는 다음과 같이 사용 적용 또는 제본 등

+0

을 http://stackoverflow.com/a/1134983/1075211 – keinabel

+1

오히려'>'비교 당신보다 'localecompare'를 사용하고 'prop.toLowerCase()를 반환 할 수도 있습니다. localeCompare (b [prop] .LowerCase());' –

답변

1

예, 물론 가능합니다. apply은 함수의 결과를 반환하므로 여기서는 적용 할 수 없지만 bind이 적합합니다.

MDN docs for Bind을 읽을 수 있습니다.

바인드가 순서대로 작동하므로 매개 변수의 순서를 변경하면 멋지고 우아합니다. sortby의 서명을 function sortby(prop, a, b) {으로 변경해 보겠습니다. 이제 우리는 bind에 첫번째 매개 변수를 고치라고 쉽게 말할 수 있습니다 :

someArray.sort(sortby.bind(undefined, 'propertyname')); 

undefined에 주목하십시오. bind에 대한 첫 번째 매개 변수는 (문서 당) 새 this 참조입니다. 우리가 그것을 사용하지 않기 때문에, 우리는 문맥을 바꾸고 싶지 않다고 말하는데 undefined을 전달할 것입니다. 다음 매개 변수는 bind에 첫 번째 인수로 'propertyname'값을 sortby에 전달하는 함수를 작성하도록 지시합니다. 이렇게하면 부분 기능 응용 프로그램; 두 개의 매개 변수를 취하는 함수를 반환합니다. sortby에 이미 주어진 첫 번째 값을 호출 한 다음 두 개의 매개 변수를 호출합니다. 이 함수는 sort으로 전달되어 필요에 따라 호출됩니다.

수동 바인딩 호출을 해석, 그것은 당신에게 같은 것을 제공 :이 당신을 도울 수

someArray.sort(function (a, b) { 
    sortby.apply(this, 'propertyname', a, b); 
}); 
+0

우수 - 솔루션과 설명 모두 우수! –