NFL の 2012 年のスケジュールを含むオブジェクトを構築しようとしています。オンラインで CSV を見つけたので、毎週ゲームを追加しようとしている場合を除いて、問題なく解析できます。コードが毎週実行された後にスケジュールをコンソール ログに記録すると、16 (byes に応じて) ではなく、1 つのゲーム (最後のゲーム) のみが取得されます。
注: 通常、プロトタイプはここではなくソース ファイルに配置しますが、明確にするためにそれらを含めました。
ボーナス: オブジェクトが完成したら投稿します。:D
これが私のコードです:
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.capitalize = function() {
return this.substr(0, 1).toUpperCase() + this.substr(1);
}
Object.prototype.getKeys = function(obj){
var keys = [];
for(var key in obj){
keys.push(key);
}
return keys;
}
Array.prototype.contains = function(obj) {
var i = this.length;
while (i--) {
if (this[i] == obj) {
return true;
}
}
return false;
}
var AppController = {};
//create a schedule object
AppController.Schedule = {};
var schedule = AppController.Schedule;
var scheduleArray = nflschedule.split(":::");
//set a game count so we can give each game an id
var gameCount = -1;
for(var i=0; i<scheduleArray.length; i++) {
gameCount++;
//filter out first line
if (i>0) {
//get a game
var thisGameItems = scheduleArray[i].split(",");
//game date
var gameDate = thisGameItems[0];
//week number
var colonSplitPattern = new RegExp("^[^:]+(?=:)");
var weekNumPattern=new RegExp("\Week(.*)");
var weekNum = "Week" + thisGameItems[2].match(colonSplitPattern).toString().match(weekNumPattern)[1].trim();
//get teams and game day
var homeTeam = thisGameItems[thisGameItems.length-3].trim();
var visitingTeam = thisGameItems[thisGameItems.length-2].trim();
var weekDay = thisGameItems[thisGameItems.length-1].trim().capitalize();
//check Schedule and see if we have this weekNum as key, if not add it
var gameWeeks = schedule.getKeys();
if (gameWeeks.contains(weekNum) == false) {
schedule[weekNum] = {};
}
var thisWeeksGames = schedule[weekNum];
//add games to the game week
thisWeeksGames[gameCount] = {
GameDate: gameDate,
GameWeek: weekNum,
HomeTeam: homeTeam,
VisitingTeam: visitingTeam,
GameDay: weekDay,
HomeTeamScore : "",
VistingTeamScore : ""
}
}
}
console.log(schedule);