가장 좋은 방법은 메모리의 데이터를 정렬하고 그 변경 사항을 반영하기 위해 새 테이블을 만드는 것입니다.
먼저 점수와 관련된 주가 많은 것으로 보입니다.
function Player(name) {
this.name = name;
this.score = 0;
}
Player.prototype.addScore = function(turnScore) {
this.score += turnScore;
};
function ScoreBoard(tallys) {
// Allow a default of an empty array.
// Also allow a predefined array. Used for immutability later on.
this.scoreTallys_ = tallys || [];
}
ScoreBoard.prototype.addTurn = function(player, turnScore, nameOfLevel) {
this.scoreTallys_.push({
player: player,
points: turnScore,
nameOfLevel: nameOfLevel
});
player.addScore(turnScore);
};
Player
와
하고 필요에 따라 ScoreBoard
객체 우리가 자신의 역할을 확장 할 수 있습니다 :이 점수 데이터를 관리하는 유한 상태 기계를 만들 수있는 기회를 제공합니다.
ScoreBoard.prototype.sort = function() {
function sorter(a,b) {
return b.points - a.points;
}
// This creates a new array (clone) but the objects are not copied only the
// references to them. Then we sort them according the the above sorter function.
var scores = this.scoreTallys_
.slice(0)
.sort(sorter);
// Return a new ScoreBoard. Immutability is an advantage in design like this.
return new ScoreBoard(scores);
};
지금 우리가 만들고 중 일반 테이블을 렌더링 할 수 있습니다
ScoreBoard.prototype.buildTBody = function() {
var rowsHtml = this.scoreTallys_.map(function(tally) {
return '<tr><td>' + tally.player.name +
'</td><td>' + tally.points +
'</td><td>' + tally.nameOfLevel +
'</td></tr>';
}).join('');
return '<tbody>' + rowsHtml + '</tbody>';
};
ScoreBoard.prototype.render = function() {
var table = document.getElementById('score-board');
table.innerHTML = this.buildTBody();
};
우리가 여기에 정렬 방법을 추가하자 : 예를 들어 점수 판은 점수의 HTML 테이블 표현을 만들 책임이 있습니다 또는 정렬 됨 :
myScoreBoard.render(); // Render in order of points as they were added.
myScoreBoard.sort().render(); // Render in order of points.
참조 용 : this jsbin은이 구현의 가능한 버전입니다.
DOM의 데이터일까요? DOM을 사용하여 상태 데이터를 저장하는 것은 매우 나쁜 생각입니다. DOM은 성능 문제가 심각합니다. 자바 스크립트에서 데이터를 메모리에 표현하는 것이 더 좋으며, 변경 사항을 적용한 다음 DOM에있는 테이블을 덮어 씀으로써 변경 사항을 반영하는 새 테이블을 렌더링하는 것이 좋습니다. – Sukima
에티켓의 일환으로 궁극적으로 올바른 대답을 선택해야한다는 것을 상기시켜드립니다. –