JavaScript实现数组乱序

通常我们用的最多的就是把一个无规则的数组按照从大到小或者从小到大的顺序排列,然而有的时候我们可能会遇到将一个有序的数组打乱,实现随机排序的效果,这就是我今天要给 大家介绍的内容了;

首先我在百度上寻找了一番,发现一个比较普遍的方法

1 function randArray(arr){
2     return arr.sort(function(){
3         return Math.random() - 0.5;
4     });
5 }

然而,这种方法存在一些问题,甚至是错误,参考链接:https://www.h5jun.com/post/array-shuffle.html

而这里有另外两种比较实用的方法介绍给大家:

方法一:

function randArray(a) {
    var b = [];
    while (a.length > 0) {  //每次遍历一个a数组中的元素,再删除该元素,直到a数组的长度为0;
        var index = parseInt(Math.random() * (a.length - 1));
        b.push(a[index]);
        a.splice(index, 1);
    }
    return b;
}

方法二:

function randArray(a){
    var len = a.length;
    for (var i = 0; i < len - 1; i++) {
        var index = parseInt(Math.random() * (len - i));
        var temp = a[index];
        a[index] = a[len - i - 1];
        a[len - i - 1] = temp;
    }
    return a;
}
时间: 2024-10-05 13:32:08

JavaScript实现数组乱序的相关文章

js数组乱序输出 数组乱序排列

网上看的数组乱序输出,要么不合实际,要么代码繁琐.自己试了下,希望能给大家带来帮助. 重要思想也是Math.random*arr.length随机下标,然后删除取到的元素,继续随机下标. //将数组乱序输出 var arr = [1,2,3,4,5,6,7,8,9,10]; var newArr = []; for(var i=0; i<arr.length; i++){ var index = Math.floor(Math.random()*arr.length);//随机下标 newArr

关于随机数列,对给定数目的自0开始步长为1的数字序列进行乱序。(可用作洗牌)

1 /** 2  * 数组乱序类 3  * @author noam  4  */ 5 public class NRandom { 6  7     /** 8      * 对给定数目的自0开始步长为1的数字序列进行乱序 9      * @param no 给定数目10      * @return 乱序后的数组11      */12     public static int[] getSequence(int no) {13         int[] sequence = new 

IOS第四天(6:答题区按钮点击和乱序)

#pragma mark - 答题区按钮点击方法 - (void)answerClick:(UIButton *)button { // 1. 如果按钮没有字,直接返回 if (button.currentTitle.length == 0) return; // 2. 如果有字,清除文字,候选区按钮显示 // 1> 使用button的title去查找候选区中对应的按钮 UIButton *btn = [self optionButtonWithTilte:button.currentTitle

写一个函数实现数组中的元素随机乱序排序

//原生JS写一个函数实现一个shuffle方法,将数组中的元素随机乱序排序 var shuffle = function(arr){ var len,t,rand; for(var i =0;len = arr.length,i<len;i++){ rand = parseInt(Math.random()*len);//parseInt(Math.random()*(len-1-0)+1);或者rand = Math.floor(Math.random()*(len-1-0)+1);即Mat

iOS之数组的排序(升序、降序及乱序)

#pragma mark -- 数组排序方法(升序) - (void)arraySortASC{ //数组排序 //定义一个数字数组 NSArray *array = @[@(3),@(4),@(2),@(1)]; //对数组进行排序 NSArray *result = [array sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) { NSLog(@"%@~%@",

笔试算法题(28):删除乱序链表中的重复项 &amp; 找出已经排好序的两个数组中的相同项

出题:给定一个乱序链表,节点值为ASCII字符,但是其中有重复项,要求去除重复项并保证不改变剩余项的原有顺序: 分析:创建一个256(2^8)大小的bool数组,初始化为false,顺序读取链表,将字母对应位置为false的重新标记为true并保留节点,将字母对 应位置为true的保持并删除节点:时间复杂度为O(N),空间复杂度为常量.注意删除节点和不删除节点的情况下,pre和cur的移动操作不相同: 解题: 1 struct Node { 2 char value; 3 Node* next;

某数组里存在乱序的正负数字,要求将负数放到左边,正数放到右边,并且正负数的相对位置不改变

先说下思路: 1.先遍历数组,将正负数的个数求出来,当然,如果存在零值,也需要求出个数来 2.根据之前求出的个数分别申请两个数组,用来存放正负数 3.再次遍历数组,将正负数放进第二步申请的两个数组中,零值需要排除在外 4.将第三步得到的两个数组再填回原始数组(也可以再申请一个数组存放结果) 完成! 以下是代码(vs2013,64位win8): 1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 //定义一个原始数组

php 二维数组索引乱序 shuffle() 函数;

在实际开发中有一个打乱数组排序的案例 案例代码如下 public function index(){ if(IS_POST){ #获取卖单列表 $buy_list=M('buy')->where(['status'=>1])->field('num')->select(); #获取卖单列表 $sell_list=M('sell')->where(['status'=>1])->field('num')->select(); foreach($buy_list

2015-4-2的阿里巴巴笔试题:乱序的序列保序输出(bit数组实现hash)

分布式系统中的RPC请求经常出现乱序的情况.写一个算法来将一个乱序的序列保序输出.例如,假设起始序号是1,对于(1, 2, 5, 8, 10, 4, 3, 6, 9, 7)这个序列,输出是:123, 4, 567, 8, 9, 10 上述例子中,3到来的时候会发现4,5已经在了.因此将已经满足顺序的整个序列(3, 4, 5)输出为一行. 1 #include<stdio.h> 2 3 int main() 4 { 5 int num ; 6 while(scanf("%d"