2016-06-19 2 views
0

Ember에서 간단한 순위 알고리즘을 만들어야합니다. Ember 모델 배열을 취하고 관계가있는 경우 동일한 순위를 지정하고 이에 따라 묶인 순위를 건너 뛸 수있는 서수를 생성해야합니다. 각 배열의 항목 수는 적으므로 성능은 중요한 고려 사항이 아닙니다. 가능한 한 Ember 관용구를 유지하고 싶습니다.Ember 순위 알고리즘

Alpha, 1 
Beta, 2 
BetaPrime, 2 
BetaDoublePrime, 2 
Gamma, 5 

I을 :

예 :

다음
// models/competition.js 
export default Model.extend({ 
    competitors: hasMany('competitor') 
    ranks: computed.[ranking function here] 
}); 

// models/competitor.js 
export default Model.extend({ 
    name: attr('string'), 
    score: attr('number'), 
    competition: belongsTo('competition') 
    rank: computed.[return rank here] 
}); 

, 다음 경쟁, 주어진 점수를 다음과 같이

Alpha, 100 
Beta, 90 
BetaPrime, 90 
BetaDoublePrime, 90 
Gamma, 80 

나는 돌아갑니다 rank 계산 된 속성을하고 싶습니다 파이썬에서는이 일을 할 수 있지만 Ember/Javascript에 익숙하지 않으며 이것을 이해할 수 없습니다. 지도/축소의 일부 조합이 핵심이지만 확실한 이유는 없습니다. 감사합니다.

ranks: Ember.computed('competitors', function() { 
    let lastScore = null; 
    let lastRank = null; 
    return this.get('competitors').sortBy('score').reverse().map((competitor, index) => { 
     let score = competitor.get('score'); 
     let rank = score === lastScore ? lastRank : index+1; 
     lastScore = score; 
     lastRank = rank; 
     return { 
      competitor: competitor, 
      rank: rank 
     }; 
    }); 
}) 

이 먼저 점수로 경쟁을 정렬합니다 (당신은 예를 들어,에 정렬하는 여러 속성을 정의 할 수 있습니다 : 당신이 경쟁 모델에서 rankins를 계산하려면

답변

0

, 나는 같은 것을 할 것 점수가 같을 때 무엇을 해야할지 결정할 때), 결과를 반전하여 가장 높은 점수를 먼저 얻은 다음 경쟁자 자체 및 순위와 정렬 된 각 경쟁자에 대한 객체를 반환합니다.

나는 이것을 경쟁 모델에 저장하는 것은 좋지 않다고 생각합니다. 순위는 경쟁에 속합니다 (경쟁 업체는 단 하나의 경쟁 업체에 속하는 것 같지만). 당신이 경쟁자의 계급을 얻고 싶다면, 그냥 경쟁에서 찾아보십시오.

+0

이 기능은 넥타이에 동일한 순위를 지정하는 주요 기능을 구현하지 않습니다. – dbinetti

+0

@dbinetti Answer – jcbvm

+0

(수정 된 요구 사항은 더 정확할 것입니다.) 감사합니다. 그러나 결과가 다음과 같이 생략 된 동점 순위를 필요로합니다 :'Alpha, 1; 베타, 2; BetaPrime, 2; BetaDoublePrime, 2; 감마, 5; '이 대답은'알파, 1; 베타, 2; BetaPrime, 2; 감마, 3, ' – dbinetti

관련 문제