用原生JS产生随机长度和随机值的数组

来源:互联网 发布:mac如何安装photoshop 编辑:程序博客网 时间:2024/05/30 04:51

之前一直想写个产生随机数组的方法,现在终于做了。向封装好的方法传入四个参数:数组最小长度、数组最大长度、数组元素最小值、数组元素最大值。调用产生数组的方法后,再用同一命名空间内的结果数组获取结果就行。

下面上硬硬的干货(100%源代码,揭示了整个"过程"-_^||):

////Version Zero         ////粗糙版本,提供了生成随机数组(最大长度7、数组元素最大值7)的功能,但代码不好复用,全局变量太多,子函数太分散。        ////功能性符合需求,鲁棒性(健壮性)、可扩展性、可维护性、灵活性、复用性都不高        //var arrRandomNums = [];        //var maxShowNum = getRandCount();        //function getRandCount() {        //    var num = parseInt(Math.random() * 10);        //    return num > 7 ? 7 : num;        //}        //var generateRamdonNumber = function (count) {        //    var rand = parseInt(Math.random() * 10);        //    if (rand > 7) {        //        return false;        //    }        //    for (var i = 0; i < arrRandomNums.length; i++) {        //        if (arrRandomNums[i] == rand) {        //            return false;        //        } else {        //        }        //    }        //    arrRandomNums.push(rand);        //}        //var needReason = function () {        //    for (var i = 0; ; i++) {        //        if (arrRandomNums.length < maxShowNum) {        //            generateRamdonNumber(maxShowNum);        //        } else {        //            break;        //        }        //    }        //}        //$(document).ready(function () {        //    $('#btnNeedReason').on('click', function () {        //        maxShowNum = getRandCount();        //        arrRandomNums = [];        //        needReason();        //        $('#testFun input[name="cbcShowCols"]').each(function (ind) {        //            var isShow = false;        //            for (var i = 0; i < arrRandomNums.length; i++) {        //                if (arrRandomNums[i] == ind) {        //                    isShow = true;        //                    i = arrRandomNums.length;        //                }        //            }        //            $(this).prop('checked', isShow);        //        });        //    });        //    $('#btnFilterCols').on('click', function () {        //        var currentSelectShowCols = [];        //        $('#testFun input[name="cbcShowCols"]:checked').each(function (ind) {        //            currentSelectShowCols.push($(this).val());        //        });        //        var strCols = currentSelectShowCols.join('-');        //        $.post(        //            '/UserDashboard/ChangeShowColumn',        //            {        //                showCol: strCols        //            }, function (res) {        //                if (res.slt.toLowerCase() == 'true') {        //                    //alert(res.msg);        //                    window.location.reload(true);        //                } else {        //                    alert('error' + res.msg);        //                }        //            }        //            );        //    });        //});        ////Version One percent five        //尝试在一个独立namespace内,用闭包产生一组长度、大小不固定的随机数组,没成功!!!!        //(function () {        //    var _NS = function () {        //    }        //    _NS.prototype.alert = function () {        //        alert('900');        //        return 900;        //    }        //    window.NS = new _NS();        //})();        //(function () {        //    this.arrRandomNums = [];        //    this.maxShowNum = 900;        //    this.myfunction = function () {        //        alert(maxShowNum);        //        return maxShowNum;        //    }        //    window.GetRandomArray = this;        //})();        //var GetRandomArray = {        //    arrRandomNums: [],        //    maxShowNum : 0,        //    myfunction : function () {        //        alert(maxShowNum);        //    }        //}        ////Version One        ////依据单一原则,开闭原则,将分散的函数合并到一起        ////数据仓储data warehouse        //var DataInfoMining = {        //    randomNums: [2, 1, 3, 2, 1, 3]        //};        //方法        //var tryGenerateRandomArr = function (maxShowNum, numMaxValue) {        //    var arrRandomNums = [];        //    //console.log('maxShowNum : ' + maxShowNum + 'numMaxValue : ' + numMaxValue);        //    //获取随机数        //    var getSingleRandNum = function (maxValueLimit) {        //        var num = parseInt(Math.random() * 10);        //        return num > maxValueLimit ? maxValueLimit : num;        //    };        //    var ShowNums = getSingleRandNum(maxShowNum);        //    //动态生成随机数组        //    var needReasonWhyCheckBoxNotClick = function () {        //        arrRandomNumsLocal = [];        //        for (var i = 0; i < ShowNums; i++) {        //            var RandNumber = getSingleRandNum(numMaxValue);        //            arrRandomNumsLocal.push(RandNumber);        //        }        //        return arrRandomNumsLocal;        //    }        //    arrRandomNums = needReasonWhyCheckBoxNotClick();        //    //for (var i = 0; i < arrRandomNums.length; i++) {        //    //    console.log('get arrRandomNums[' + i + '] : ' + arrRandomNums[i]);        //    //}        //    return arrRandomNums;        //}        //window.onload = function () {        //    DataInfoMining.randomNums = tryGenerateRandomArr(8, 3);        //    for (var i = 0; i < DataInfoMining.randomNums.length; i++) {        //        console.log('get arrRandomNums[' + i + '] : ' + DataInfoMining.randomNums[i]);        //    }        //};        //$(document).ready(function () {        //    $('#btnNeedReason').on('click', function () {        //        var arrRandomNums = DataInfoMining.randomNums;        //        $('#testFun input[name="cbcShowCols"]').each(function (ind) {        //            var isShow = false;        //            for (var i = 0; i < arrRandomNums.length; i++) {        //                if (arrRandomNums[i] == ind) {        //                    isShow = true;        //                    i = arrRandomNums.length;        //                }        //            }        //            $(this).prop('checked', isShow);        //        });        //    });        //    $('#btnFilterCols').on('click', function () {        //        var currentSelectShowCols = [];        //        $('#testFun input[name="cbcShowCols"]:checked').each(function (ind) {        //            currentSelectShowCols.push($(this).val());        //        });        //        var strCols = currentSelectShowCols.join('-');        //        $.post(        //            '/UserDashboard/ChangeShowColumn',        //            {        //                showCol: strCols        //            }, function (res) {        //                if (res.slt.toLowerCase() == 'true') {        //                    //alert(res.msg);        //                    window.location.reload(true);        //                } else {        //                    alert('error' + res.msg);        //                }        //            }        //            );        //    });        //});        ////Version Two        ////数据和方法封装在一个命名空间内,防止namespace pollution和便于管理(比如维护、扩展)        //var DataInfoMining = {        //    randomNums: [1, 3, 1, 4, 6, 6, 6, 2, 1, 3, 2, 1, 3],        //    tryGenerateRandomArr: function (maxShowNum, numMaxValue) {        //        try {        //        //获取随机数        //        var getSingleRandNum = function (maxValueLimit) {        //            var num = parseInt(Math.random() * 10);        //            return num > maxValueLimit ? maxValueLimit : num;        //        };        //        //数组长度随机,但不超过最大值maxShowNum        //        var ShowNums = getSingleRandNum(maxShowNum);        //        //动态生成随机数组        //        var needReasonWhyCheckBoxNotClick = function (outsideShowNum) {        //            DataInfoMining.randomNums = [];        //            for (var i = 0; i < 1000; i++) {        //                //数组元素值不超过最大值numMaxValue        //                var RandNumber = getSingleRandNum(numMaxValue);        //                //数组元素是否重复        //                var isReperatValue = false;        //                var len = DataInfoMining.randomNums.length;        //                for (var j = 0; j < len; j++) {        //                    if (DataInfoMining.randomNums[j] == RandNumber) {        //                        isReperatValue = true;        //                        j = len;        //                    }        //                }        //                //数组长度是否达到要求,达到要求退出        //                var isGetAndLeave = false;        //                if (!isReperatValue) {        //                    DataInfoMining.randomNums.push(RandNumber);        //                    //满足数组长度后退出        //                    if (DataInfoMining.randomNums.length == outsideShowNum) {        //                        isGetAndLeave = true;        //                    }        //                }        //                if (isGetAndLeave) {        //                    console.debug('current i : ' + i);        //                    break;        //                }        //            }        //        }        //        //!!!!ShowNums无法在needReasonWhyCheckBoxNotClick内自动获取到,只能通过形参传进方法内        //        needReasonWhyCheckBoxNotClick(ShowNums);        //        //console.log('maxShowNum : ' + maxShowNum + 'numMaxValue : ' + numMaxValue);        //        //for (var i = 0; i < DataInfoMining.randomNums.length; i++) {        //        //    console.log('get arrRandomNums[' + i + '] : ' + DataInfoMining.randomNums[i]);        //        //}        //        } catch (e) {        //            console.error(e + '====' + e.message);        //        }        //    }        //};        //Version Three        ////之前数组长度和元素值,只有最大值限制(maxShowLen\numMaxValue),现在增加最小值限制        //数据和方法封装在一个命名空间内,防止namespace pollution和便于管理(比如维护、扩展)        var DataInfoMining = {            randomNums: [1, 3, 1, 4, 6, 6, 6, 2, 1, 3, 2, 1, 3],            tryGenerateRandomArr: function (minShowLen, maxShowLen, numMinValue, numMaxValue) {                try {                    //获取随机数                    var getSingleRandNum = function (minValueLimit, maxValueLimit) {                        var num = parseInt(Math.random() * 10);                        //num = num > maxValueLimit ? maxValueLimit : num;                        return num < minValueLimit ? minValueLimit : num > maxValueLimit ? maxValueLimit : num;                    };                    //数组长度随机,但不超过最大值maxShowLen                    var ShowNums = getSingleRandNum(minShowLen, maxShowLen);                    //动态生成随机数组                    var needReasonWhyCheckBoxNotClick = function (outsideShowNum) {                        DataInfoMining.randomNums = [];                        for (var i = 0; i < 1000; i++) {                            //数组元素值不超过最大值numMaxValue                            var RandNumber = getSingleRandNum(numMinValue, numMaxValue);                            //数组元素是否重复                            var isReperatValue = false;                            var len = DataInfoMining.randomNums.length;                            for (var j = 0; j < len; j++) {                                if (DataInfoMining.randomNums[j] == RandNumber) {                                    isReperatValue = true;                                    j = len;                                }                            }                            //数组长度是否达到要求,达到要求退出                            var isGetAndLeave = false;                            if (!isReperatValue) {                                DataInfoMining.randomNums.push(RandNumber);                                //满足数组长度后退出                                if (DataInfoMining.randomNums.length == outsideShowNum) {                                    isGetAndLeave = true;                                }                            }                            if (isGetAndLeave) {                                console.debug('current i : ' + i);                                break;                            }                        }                    }                    //!!!!ShowNums无法在needReasonWhyCheckBoxNotClick内自动获取到,只能通过形参传进方法内                    needReasonWhyCheckBoxNotClick(ShowNums);                    //单元测试、持续集成测试Test Drive Developing(TDD)                     //console.log('maxShowLen : ' + maxShowLen + 'numMaxValue : ' + numMaxValue);                    //for (var i = 0; i < DataInfoMining.randomNums.length; i++) {                    //    console.log('get arrRandomNums[' + i + '] : ' + DataInfoMining.randomNums[i]);                    //}                } catch (e) {                    console.error(e + '====' + e.message);                }            }        };        //window.onload = function () {        //    console.log(console.time('========time profile========'));        //    DataInfoMining.tryGenerateRandomArr(8, 8);        //    //DataInfoMining.randomNums = tryGenerateRandomArr(8, 8);        //    console.trace('after creating trace: ');        //    console.debug('after creating debug: ');        //    console.hasOwnProperty('log');        //    console.hasOwnProperty('test');        //    console.info('after creating info: ');        //    console.assert(true, 'after creating info: ');        //    for (var i = 0; i < DataInfoMining.randomNums.length; i++) {        //        console.log('arrRandomNums[' + i + '] : ' + DataInfoMining.randomNums[i]);        //    }        //    console.log(console.time('========time profile========'));        //};        $(document).ready(function () {            $('#btnNeedReason').on('click', function () {                DataInfoMining.tryGenerateRandomArr(1, 4, 4, 7);                var arrRandomNums = DataInfoMining.randomNums;                $('#testFun input[name="cbcShowCols"]').each(function (ind) {                    var isShow = false;                    for (var i = 0; i < arrRandomNums.length; i++) {                        if (arrRandomNums[i] == ind) {                            isShow = true;                            i = arrRandomNums.length;                        }                    }                    $(this).prop('checked', isShow);                });            });            $('#btnFilterCols').on('click', function () {                var currentSelectShowCols = [];                $('#testFun input[name="cbcShowCols"]:checked').each(function (ind) {                    currentSelectShowCols.push($(this).val());                });                var strCols = currentSelectShowCols.join('-');                $.post(                    '/UserDashboard/ChangeShowColumn',                    {                        showCol: strCols                    }, function (res) {                        if (res.slt.toLowerCase() == 'true') {                            //alert(res.msg);                            window.location.reload(true);                        } else {                            alert('error' + res.msg);                        }                    }                    );            });        });

文件传送门:http://download.csdn.net/detail/changshenglugu/9107333

0 0
原创粉丝点击