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를 계산하려면
이 기능은 넥타이에 동일한 순위를 지정하는 주요 기능을 구현하지 않습니다. – dbinetti
@dbinetti Answer – jcbvm
(수정 된 요구 사항은 더 정확할 것입니다.) 감사합니다. 그러나 결과가 다음과 같이 생략 된 동점 순위를 필요로합니다 :'Alpha, 1; 베타, 2; BetaPrime, 2; BetaDoublePrime, 2; 감마, 5; '이 대답은'알파, 1; 베타, 2; BetaPrime, 2; 감마, 3, ' – dbinetti