码迷,mamicode.com
首页 > 编程语言 > 详细

一道返回不重复数组的测试题

时间:2017-03-09 15:25:19      阅读:429      评论:0      收藏:0      [点我收藏+]

标签:随机   splice   i++   script   avs   重复   范围   ons   []   

编写一个javscript函数 fn,该函数有一个参数 n(数字类型),其返回值是一个数组,该数组内是 n 个随机且不重复的整数,且整数取值范围是 [2, 32]。

 

注:n的值应该在0到30之间,超出应做处理,本文解法就不处理了。另本文解法不考虑算法性能,因为本人菜。

解法一

getRandomArray(n) {
        var array = [];
        for (let i = 2; i <= 32; i++) {
            array.push(i);
        }

        for (let i = array.length; i > 0; i--) {
            var j = Math.floor(Math.random() * i);
            // var x = array[i - 1];
            // array[i - 1] = array[j];
            // array[j] = x;
            [array[i - 1], array[j]] = [array[j], array[i - 1]];
        }

        console.log(array.splice(2, n));
    }
 
解法二
getRandomArray1(n) {
        console.log(n);

        var array = [], obj={};
        for (var i = 0; i < n; i++) {
            var a = Math.floor(2 + Math.random() * 31);
            if (!obj[a]) {
                array.push(a);
                obj[a] = a;
            }else{
                obj["repeatIndex" + i] = a; // 添加出现的重复值,便于查看
                i--
            }
        }
        console.log(array);
    }
 

一道返回不重复数组的测试题

标签:随机   splice   i++   script   avs   重复   范围   ons   []   

原文地址:http://www.cnblogs.com/mjbin/p/6525697.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!