【问题标题】:Two Dimensional Object / Associate Array into Three Dimensional Object Javascript二维对象/关联数组到三维对象Javascript
【发布时间】:2012-05-14 18:33:18
【问题描述】:

有没有办法解决这个问题

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++;
}

【问题讨论】:

  • 数组字面量中不能有ME:

标签: javascript arrays object associative-array


【解决方案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.

【讨论】:

    猜你喜欢
    • 2013-01-02
    • 2015-01-07
    • 1970-01-01
    • 2016-11-08
    • 2018-12-16
    • 2021-03-15
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多