首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对数组进行排序

对数组进行排序
EN

Stack Overflow用户
提问于 2014-03-06 01:18:37
回答 4查看 1K关注 0票数 0

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

代码语言:javascript
运行
复制
$(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);
});
EN

回答 4

Stack Overflow用户

发布于 2014-03-06 01:23:21

如果原始数组按字母顺序排序,则只需执行一个sort()

代码语言:javascript
运行
复制
cards.sort()

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

代码语言:javascript
运行
复制
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)
});
票数 0
EN

Stack Overflow用户

发布于 2014-03-06 01:24:59

我这样做的方式是拥有一个独立的索引数组,与数组的长度相同。因此,例如,

代码语言:javascript
运行
复制
var cards = ['clu01', 'clu02','clu03'];

您可以创建

代码语言:javascript
运行
复制
var indices = [0, 1, 2];

现在,当您进行随机操作时,比较原始数组,但对索引数组进行随机操作。因此,从本质上讲,您是在打乱数组中的位置,而不是元素本身。这样,您可以将这两种状态保持分离,并且可以在任何时候访问这两种状态,而不会产生太多开销。

要访问随机播放,请执行以下操作:

代码语言:javascript
运行
复制
cards[indices[i]];

要访问原始文件,请执行以下操作:

代码语言:javascript
运行
复制
cards[i];
票数 0
EN

Stack Overflow用户

发布于 2014-03-06 01:26:50

考虑到重新整理卡片的时间和麻烦,你可能会有两个数组,你的源“排序”数组和你的随机数组。当你想对数组进行排序时,只需使用源数组即可。当你想打乱一个数组时,你可以重新打乱“打乱”的数组,或者复制一份源代码并打乱。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22204656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档