2016-12-12 3 views
2

내가 자바 스크립트 '종류'와 해결책을 찾기 위해 사투를 벌인거야,하지만 그 부울 속성으로 객체의 배열을 정렬하기 위해 노력하고있어 방법의 부울 속성으로 객체의 배열을 정렬하는 방법 정렬을 시도하기 때문에 배열의 최상위 항목은 'offer = true', 'shortlisted = true', 마지막으로 'rejected = true'가됩니다.난</p> <p>

var toSort = [{ 
    offer: false, 
    shortlisted: true, 
    rejected: false, 
    stage: 2 
}, { 
    offer: false, 
    shortlisted: false, 
    rejected: true, 
    stage: null 
}, { 
    offer: true, 
    shortlisted: true, 
    rejected: false, 
    stage: null 
}, { 
    offer: false, 
    shortlisted: true, 
    rejected: false, 
    stage: 1 
}]; 

이것은 내가 원하는 최종 결과는

[{ 
    offer: true, 
    shortlisted: true, 
    rejected: false, 
    stage: null 
}, { 
    offer: false, 
    shortlisted: true, 
    rejected: false, 
    stage: 1 
}, { 
    offer: false, 
    shortlisted: true, 
    rejected: false, 
    stage: 2 
}, { 
    offer: false, 
    shortlisted: false, 
    rejected: true, 
    stage: null 
}] 

이 배열을 정렬하는 가장 좋은 방법은 무엇인가를 달성하는 것입니다?

+0

어떻게 부울로 정렬합니까? 속성? 더 자세하게 얘기해 주 시겠어요? –

+0

무엇을 시도 했습니까? 어떻게 실패 했습니까? 배열을 얼마나 정확하게 정렬 하시겠습니까? –

+0

정렬 기준은 어느 필드입니까? – WillardSolutions

답변

5

sort()과 같이 사용할 수 있습니다.

var toSort = [{ 
 
    offer: false, 
 
    shortlisted: true, 
 
    rejected: false, 
 
    stage: 2 
 
}, { 
 
    offer: false, 
 
    shortlisted: false, 
 
    rejected: true, 
 
    stage: null 
 
}, { 
 
    offer: true, 
 
    shortlisted: true, 
 
    rejected: false, 
 
    stage: null 
 
}, { 
 
    offer: false, 
 
    shortlisted: true, 
 
    rejected: false, 
 
    stage: 1 
 
}]; 
 

 
var result = toSort.sort(function(a, b) { 
 
    return b.offer - a.offer || 
 
    b.shortlisted - a.shortlisted || 
 
    b.rejected - a.rejected 
 
}) 
 

 
console.log(result)

0

한 가지 방법은 높은 우선 순위의 값에 더 높은 점수를 설정, 각 개체에 대한 수치 점수를 할당하는 것입니다. 예를 들면 :

var scoreObj = function(o) { 
     var score = 0; 
     if(o.offer) { 
      score+=100; 
     } 
     if(o.shortlisted) { 
      score+=10; 
     } 
     if(o.rejected) { 
      score+=1; 
     } 
     return score; 
    }; 
    var sorted = toSort.sort(function(a,b){ 
     return scoreObj(b) - scoreObj(a); 
    }); 
0

하는 간단한 방법 :

toSort.sort(function(a, b){ 
    var numberA = a.offer * 5 + a.shortlisted * 3 + a.rejected; 
    var numberB = b.offer * 5 + b.shortlisted * 3 + b.rejected; 
    return numberA < numberB 
}); 

이 작동하는 이유 :

1) a.offer 우리는 추가 사실이다 그래서 만약 우리가 0 또는 1로 부울을 처리 할 수 ​​있습니다 5에서 numberA, 0이 아닌 경우

2) offer 속성이 true 인 경우 다른 모든 것이 true 인 경우에도 offer가 계속 표시됩니다 (5> 1 + 3 = 4이기 때문에)

3 개 이상의 속성 : 우선 우선 순위가 낮은 속성의 합계보다 큰 숫자 값을 지정하여 원하는 부울 속성에 우선 순위를 부여합니다.

+0

왜 5와 3 대신 4와 2 ..? 그건 나에게 몇 가지 이진 감각을 만들 것입니다 .. [Nenad의 대답] (http://stackoverflow.com/a/41105161/4543207) 나에게 잘 보인다. – Redu

+0

@Redu 정말로 4와 2도 잘 작동 할 것이고, 나는 또한 다른 대답이 더 좋다고 믿는다;) – juvian