2012-05-14 116 views
0

反正是有去形成这个二维对象/关联数组成三维对象中的JavaScript

var stateDat = { 
ME: ['Maine',1328361], 
etc. 
}; 

对此

var stateDatHistory = { 
1:[ 
    ME: ['Maine',1328361], 
    etc. 
    ], 
2:[ 
    ME: ['Maine',1328361], 
    etc. 
    ], 
etc 
}; 

动态的功能?例如,这不起作用...

turn = 1; 

function start(){ 
stateDatHistory[turn].push(stateDat); 
stateDat['ME'][1]= stateDat['ME'][1] - 500; //changing population 
turn++; 
} 
+0

数组文字不能有'ME:'里面 –

回答

1

它的历史部分可能是一个对象数组。所以......

var stateDatHistory = [ 
    { ME: ['Maine', 1328361] } 
]; 

或者,如果你需要通过一键引用历史上每一个“一步”,也可能是包含数组值对象的对象...

var stateDatHistory = { 
    1: [ 
     { ME: ['Maine', 12334] } 
    ] 
} 

在后一种情况下,“开始”码会是这样的......

turn = 1 

function start() { 
    if (typeof stateDatHistory[turn] === 'undefined') { 
     stateDatHistory[turn] = []; 
    } 
    stateDatHistory[turn].push(stateDat); 
    stateDat['ME'][1]= stateDat['ME'][1] - 500; //changing population 
    turn++; 
} 

说了这么多,我觉得倾向于提的是使用对象包含所有这种状态的数据将是一个很好的决定。考虑例如...

// Define our manager 
var stateDatManager = function() { }; 
(function(instance) { 

    instance.init = function() { 
     // Setup internal state 
     this.history = {}; 
     this.turn = 0; 
     this.initialized = true; 
    }; 

    instance.start = function(turn, data) { 
     if (!this.initialized) { this.init(); } 
     this.turn = turn; 
     this.addToHistory(data); 
    }; 

    instance.addToHistory(data) { 
     if (typeof this.history[this.turn] === 'undefined') { 
      this.history[this.turn] = []; 
     } 
     this.history[this.turn].push(data); 
    }; 

    instance.advanceTurn() { 
     this.turn += 1; 
    }; 

}(stateDatManager.prototype)); 

// Use it 
var manager = new stateDatManager(); 
manager.start(1, [ 
    { ME: ['Maine', 1328361] } 
]); 

// Move to the next turn... 
manager.advanceTurn(); 

// etc.