js生成指定范围内指定长度随机不重复的字符串数组

整理了一下随机生成指定范围内指定长度且不重复的字符串数组的方法。不多说,直接上代码。

var getArrStr = {

        dataArr: [],

        getConfig: function (dataNum, maxNum) {

            getArrStr.dataArr = [];

            if (dataNum > maxNum || dataNum <= 0) {

                return "输入的数据有误!";

            } else {

                getArrStr.setConfig(dataNum, maxNum);

                return getArrStr.dataArr.toString();

            }

        },

        setConfig: function (dataNum, maxNum) { //生成数组单个数据

            var data = parseInt(Math.random() * maxNum);

            if (getArrStr.dataArr.length < 0) {

                getArrStr.dataArr.push(data);

                getArrStr.setConfig(dataNum, maxNum);

            } else {

                if (getArrStr.dataArr.length >= dataNum) {

                    return false;

                } else {

                    var hasThis = getArrStr.checkConfig(data, getArrStr.dataArr);

                    if (hasThis != "-1") {

                        getArrStr.setConfig(dataNum, maxNum);

                    } else {

                        getArrStr.dataArr.push(data);

                        getArrStr.setConfig(dataNum, maxNum);

                    }

                }

            }

        },

        checkConfig: function (needle, arr) {//检查生成的数据是否重复,重复返回下标,不重复返回-1;

            var type = typeof needle;

            if (type == 'string' || type == 'number') {

                for (var i in arr) {

                    if (arr[i] == needle) {

                        return i;

                    }

                }

            }

            return "-1";

        }

    };

   window.onload = function () {

        //生成答案;
    document.write("随机生成[0-10)内长度为5的字符串数组"+getArrStr.getConfig(5, 10)+"</br>");
    document.write("随机生成[0-10)内长度为10的字符串数组"+getArrStr.getConfig(10, 10));

   }

首先:我们需要初始化一下记录数据的dataArr,避免重复调用的时候出现数据重复的问题,再判断一下传入的参数是否合理。

<span style="white-space:pre">	</span>getConfig: function (dataNum, maxNum) {
            getArrStr.dataArr = [];
            if (dataNum > maxNum || dataNum <= 0) {
                return "输入的数据有误!";
            } else {
                getArrStr.setConfig(dataNum, maxNum);
                return getArrStr.dataArr.toString();
            }
        },

然后:我们就可以随机生成指定范围的值了,生成之后我们判断记录数据的dataArr里面是否有值,如果没有就直接push进去。如果有值就进行dataArr的长度判断。长度不在范围内,就结束值的随机生成。反之就判断这个值是否存在于dataArr内,如果存在,就再次调用getArrStr.setConfig()方法,如果不存在就将值存入dataArr里面并再次调用getArrStr.setConfig()方法直到生成的dataArr的长度达到指定长度后再结束。

	setConfig: function (dataNum, maxNum) { //生成数组单个数据
            var data = parseInt(Math.random() * maxNum);//生成随机数
            if (getArrStr.dataArr.length < 0) {
                getArrStr.dataArr.push(data);
                getArrStr.setConfig(dataNum, maxNum);
            } else {
                if (getArrStr.dataArr.length >= dataNum) {
                    return false;
                } else {
                    var hasThis = getArrStr.checkConfig(data, getArrStr.dataArr);//判断随机数是否存在于目标数组中
                    if (hasThis != "-1") {
                        getArrStr.setConfig(dataNum, maxNum);
                    } else {
                        getArrStr.dataArr.push(data);
                        getArrStr.setConfig(dataNum, maxNum);
                    }
                }
            }
        },

判断一个值是否存在于一个数组里的方法:如果存在就返回该值在该数组里面的下标,如果不存在就返回-1.

<span style="white-space:pre">	</span>checkConfig: function (needle, arr) {//检查生成的数据是否重复,重复返回下标,不重复返回-1;
            var type = typeof needle;
            if (type == 'string' || type == 'number') {
                for (var i in arr) {
                    if (arr[i] == needle) {
                        return i;
                    }
                }
            }
            return "-1";
        }

ok,我们看一下返回的结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值