zoukankan      html  css  js  c++  java
  • 如何随机排序数组?使用多种方式!递归,迭代,洗牌,sort方法!

    方式1: 使用sort 方法 ----

     1        // 方法1 使用sort 方法  
     2         var  arr = [1,2,3,4,5,6,7,8];
     3         function foo(arr) {
     4             var cloneArr = arr.concat();
     5             cloneArr.sort(function (n1,n2) {
     6                 return Math.random() - 0.5 ;
     7             });
     8             return cloneArr;
     9         }
    10         for (var i= 0 ; i < arr.length ; i++ ){
    11             console.log(foo(arr));
    12         }

    方式2:使用递归 

        <script>
            var arr = [1,2,3,4,5,6,7,8];
    
            function foo(arr) {
                //使用concat 复制一个数组中 
                var  cloneArr = arr.concat();
                var result = [];
                    (function name(params) {
                        if (!cloneArr.length)  return ;
                        var index = Math.floor(Math.random() * cloneArr.length);
                        result = result.concat(cloneArr.splice(index, 1));
                        arguments.callee();
                    })()
                return result;
            }
            for (let i = 0; i < arr.length; i++) {
                console.log(foo(arr))            
            }
        </script>
    </html>

    方式3:使用迭代

           var arr = [1, 2, 3, 4, 5, 6, 7, 8];
                function foo(arr) {
                    //使用concat 复制一个数组中 
                    var cloneArr = arr.concat();
                    var result = [];
    
                    var len = cloneArr.length;
    
                    for(var i= 0 ;i< len ;i++){
                        var index = Math.floor(Math.random()* cloneArr.length);
                        result = result.concat(cloneArr.splice(index,1));
                    }
                    return result ;
                }
                for (let i = 0; i < arr.length; i++) {
                    console.log(foo(arr))
                }

    方法4: 洗牌方式

                       var arr = [1, 2, 3, 4, 5, 6, 7, 8];
                        function foo(arr) {
                            //使用concat 复制一个数组中 
                            var cloneArr = arr.concat();
    
                            for (var i = 0; i < cloneArr.length; i++) {
                                var index = Math.floor(Math.random() * cloneArr.length);
                                var temp = cloneArr[index];
                                cloneArr[index] = cloneArr[i];
                                cloneArr[i] = temp;
                            }
                            return cloneArr;
                        }
                        for (let i = 0; i < arr.length; i++) {
                            console.log(foo(arr))
                        }

    综合四种方法 -----认为用第四钟洗牌方式更佳!

    一份帮助文档,无论多么仔细,都不会帮助主人多敲一行代码!
  • 相关阅读:
    【SQLServer】 查询一个字段里不同值的最新一条记录
    【MySQL】mysql5.7数据库的安装和配置
    【Java】JDK安装及环境变量配置
    【Oracle】SQL语句优化
    【JavaScript】 控制自适应高度
    【Java】登录验证码
    【JavaScript】 直接下载保存文件
    【Java】Java批量文件打包下载zip
    【Java】Java 单文件下载及重命名
    主机在无线网络的情况下,设置centos7.2虚拟机网络联通
  • 原文地址:https://www.cnblogs.com/yaogengzhu/p/10382244.html
Copyright © 2011-2022 走看看