Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 阵列度假村_Javascript_Jquery_Arrays - Fatal编程技术网

Javascript 阵列度假村

Javascript 阵列度假村,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有以下内容,然后我想将数组恢复到其原始状态,并将输出发布到console.log。但我有点迷失了方向: $(document).ready(function(){ var cards=new Array( 'clu01', 'clu02', 'clu03', 'clu04', 'clu05', 'clu06',

我有以下内容,然后我想将数组恢复到其原始状态,并将输出发布到console.log。但我有点迷失了方向:

$(document).ready(function(){
        var cards=new Array(
            'clu01',
            'clu02',
            'clu03',
            'clu04',
            'clu05',
            'clu06',
            'clu07',
            'clu08',
            'clu09',
            'clu10',
            'clu11',
            'clu12',
            'clu13',
            'dia01',
            'dia02',
            'dia03',
            'dia04',
            'dia05',
            'dia06',
            'dia07',
            'dia08',
            'dia09',
            'dia10',
            'dia11',
            'dia12',
            'dia13',
            'hea01',
            'hea02',
            'hea03',
            'hea04',
            'hea05',
            'hea06',
            'hea07',
            'hea08',
            'hea09',
            'hea10',
            'hea11',
            'hea12',
            'hea13',
            'spa01',
            'spa02',
            'spa03',
            'spa04',
            'spa05',
            'spa06',
            'spa07',
            'spa08',
            'spa09',
            'spa10',
            'spa11',
            'spa12',
            'spa13'
        );

        function Shuffle(o) {
            for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
            return o;
        };

        Shuffle(cards);

        console.log(cards);
});

如果原始数组按算术排序,则只需进行排序即可

您还可以定义自定义排序函数:

cards.sort( function(a, b) {
    // some logic to compare 2 values to see which goes first
    // return 1 if a comes after b
    // return -1 if a comes before b
    // return 0 if they are the same (this usually means whichever came first will be first)
});

我这样做的方式是有一个单独的索引数组,数组的长度相同。比如说

var cards = ['clu01', 'clu02','clu03'];
你创造

var indices = [0, 1, 2];
现在,当您进行洗牌时,您将比较原始数组,但洗牌索引数组。因此,本质上,您是在洗牌数组中的位置,而不是元素本身。这样,您就可以将这两种状态分开,并且可以随时访问这两种状态,而无需太多开销

要访问洗牌:

cards[indices[i]];
要访问原件:

cards[i];

随着时间的推移,你将不得不重新使用你的牌,你可能会有两个数组,你的源排序数组,和你的洗牌数组。当您想对数组进行排序时,只需使用源数组。当你想洗牌一个数组时,你可以洗牌被洗牌的数组,或者复制一个源并洗牌


战争已经胜利了,你已经可以洗牌了。

原来的排序顺序是什么?字母顺序?在洗牌之前复制一份数组。^^他说,只要执行var cards2=cards.slice0,就可以保留原始数组。原始顺序就是当前数组的顺序。你能在我的代码中举例说明你的意思吗我对此不知所措,我想我已经变成了代码盲。哈哈,是的,你最好在洗牌之前复制一个数组,就像《非常感谢》评论中提到的那样。你能不能在我的代码里加个例子?很抱歉,我正在学习这一点,所以这都是很好的做法。干杯,就这些。与其调用Shufflecards,不如调用Shuffleindices,然后在需要访问被洗牌的位置时,通过索引阵列卡读取该位置[Indexs[i]],但仍然丢失:\
var orig_cards = cards.slice(0);
Shuffle(cards);
console.log(cards);
cards = orig_cards;
console.log(cards);
var orig_cards = cards.slice(0);
Shuffle(cards);
console.log(cards);
cards = orig_cards;
console.log(cards);