每次调用函数JavaScript时都使用不同的数组

时间:2017-04-04 10:39:16

标签: javascript

所以我有一堆看起来像的数组,

var arr = [characterA, characterB, characterC];
var arr2 = [characterC, characterA, characterB];
var arr3 = [characterB, characterC, characterA];

我正在做这些事情(什么不重要),但看起来像,

    arr[0].alignTo(columnLeft, Phaser.LEFT_CENTER);
    arr[1].alignIn(columnLeft, Phaser.CENTER);
    arr[2].alignTo(columnLeft, Phaser.RIGHT_CENTER);

它在一个名为toggle()的函数中,如此,

  toggle:function() {
    var arr = [characterA, characterB, characterC];
    var arr2 = [characterC, characterA, characterB];
    var arr3 = [characterB, characterC, characterA];

    arr[0].alignTo(columnLeft, Phaser.LEFT_CENTER);
    arr[1].alignIn(columnLeft, Phaser.CENTER);
    arr[2].alignTo(columnLeft, Phaser.RIGHT_CENTER);

    timer.add(1000, this.toggle, this);
  },

所以我想要做的,基本上,每次我调用这个函数。我使用了不同的arrays集,所以在我正在做arr[0]的那一刻我将如何编写它以便每次调用函数时它都使用arr2然后在arr3之后{ {1}}然后返回arr等等。

我已经和它斗争了一天左右。

1 个答案:

答案 0 :(得分:1)

如果您的意思是每次拨打toggle,我们一个arr),下一次呼叫将使用下一个(arr2),并且下一个调用将使用下一个(arr3),您可以将它们放在一个数组中并记住要使用的下一个数组的索引:

// Outside the function
var arr = [characterA, characterB, characterC];
var arr2 = [characterC, characterA, characterB];
var arr3 = [characterB, characterC, characterA];
var arrays = [arr, arr2, arr3];
var index = 0;

// In the function:
toggle:function() {
    var thisArray = arrays[index];
    index = ++index % arrays.length; // Wraps around if necessary
    thisArray[0].alignTo(columnLeft, Phaser.LEFT_CENTER);
    thisArray[1].alignIn(columnLeft, Phaser.CENTER);
    thisArray[2].alignTo(columnLeft, Phaser.RIGHT_CENTER);

    timer.add(1000, this.toggle, this);
},

如果数组 要在toggle内构建,我们只需将index保留在外面并仅构建我们需要的数组:

// Outside the function
var index = 0;

// In the function:
toggle:function() {
    var arr;
    switch (index) {
        case 0:
            arr = [characterA, characterB, characterC];
            break;
        case 1:
            arr = [characterC, characterA, characterB];
            break;
        case 2:
            arr = [characterB, characterC, characterA];
            break;
    }
    index = ++index % 3; // Wraps around if necessary
    arr[0].alignTo(columnLeft, Phaser.LEFT_CENTER);
    arr[1].alignIn(columnLeft, Phaser.CENTER);
    arr[2].alignTo(columnLeft, Phaser.RIGHT_CENTER);

    timer.add(1000, this.toggle, this);
},