成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript算法題之–隨機(jī)數(shù)的生成

tigerZH / 1863人閱讀

摘要:準(zhǔn)備面試,多看點(diǎn)題。來自雨夜帶刀需求描述從一組有序的數(shù)據(jù)中生成一組隨機(jī)并且不重復(fù)的數(shù),類似于簡(jiǎn)單的抽獎(jiǎng)程序的實(shí)現(xiàn)。

(準(zhǔn)備面試,多看點(diǎn)題。來自雨夜帶刀"s Blog)

需求描述:從一組有序的數(shù)據(jù)中生成一組隨機(jī)并且不重復(fù)的數(shù),類似于簡(jiǎn)單的抽獎(jiǎng)程序的實(shí)現(xiàn)。
先來生成一個(gè)有序的數(shù)組:

var arr = [],
length = 100,
i = 0;
for( ; i < length; i++ ){
    arr.push( i );
}

從一個(gè)長(zhǎng)度為 100 的有序數(shù)組中隨機(jī)拿出 10 個(gè)隨機(jī)的數(shù),并且不能有重復(fù)。

方法1:隨機(jī)抽取法
var gRandomArr = function( arr, length ){
    var newArr = [],
    i = 0,
        index;

    for( ; i < length; i++ ){
        // 利用數(shù)組長(zhǎng)度生成隨機(jī)索引值
        index = parseInt( Math.random() * arr.length );
        // 將隨機(jī)索引對(duì)應(yīng)的數(shù)組元素添加到新的數(shù)組中
        newArr.push( arr[index] );
        // 刪除原數(shù)組中隨機(jī)生成的元素
        arr.splice( index, 1 );
    }

    return newArr;
};

// 調(diào)用
gRandomArr( arr, 10 );

方法1主要是采用基于數(shù)組本身的長(zhǎng)度去生成隨機(jī)的索引值,然后將索引值對(duì)應(yīng)的數(shù)組元素添加到隨機(jī)數(shù)組中,由于不能有重復(fù),在添加好后將刪除原數(shù)組的元素。

方法2:隨機(jī)打亂原數(shù)組的順序,然后再一次性返回
var gRandomArr = function( arr, length ){
    // 使用sort將原數(shù)組的順序打亂,讓有序變成無序
    arr.sort(function(){
        return Math.random() - 0.5;
    });

    // 從原數(shù)組中一次性返回10個(gè)元素
    return arr.slice( 0, length );
};

// 調(diào)用
gRandomArr( arr, 10 );

方法2采用的辦法是先打亂原數(shù)組的順序,但這里需要用到 sort 來對(duì)原數(shù)組進(jìn)行排序,如果數(shù)組長(zhǎng)度較大的話,sort 排序的性能損耗會(huì)更大,因?yàn)樾枰闅v整個(gè)數(shù)組,而隨機(jī)抽取的話,不需要對(duì)整個(gè)數(shù)組進(jìn)行遍歷,故其性能會(huì)更好。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/87688.html

相關(guān)文章

  • JavaScript算法題之–查找不同順序排列字符串

    摘要:來自雨夜帶刀需求描述從一組數(shù)組中找出一組按不同順序排列的字符串的數(shù)組元素。最后用編碼和作為對(duì)象的來保存編碼和一致的字符串。方法方法是將字符串轉(zhuǎn)換成數(shù)組后再對(duì)數(shù)組進(jìn)行排序,和使用排序后會(huì)變成,將拍好序的字符串作為對(duì)象的來保存排序一致的字符串。 (準(zhǔn)備面試,多看點(diǎn)題。來自雨夜帶刀s Blog ) 需求描述:從一組數(shù)組中找出一組按不同順序排列的字符串的數(shù)組元素。假如有這樣一個(gè)數(shù)組: [ ...

    zhjx922 評(píng)論0 收藏0
  • python面試題之“該死for循環(huán)系列”(一)

    摘要:這是一道魔性面試題,難倒了無數(shù)英雄好漢上面代碼的執(zhí)行順序是這樣的從上到下第一個(gè)函數(shù)就是實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的加法運(yùn)算第二個(gè)函數(shù)是一個(gè)生成器函數(shù),如果調(diào)用它會(huì)返回一個(gè)生成器這一行調(diào)用了生成器函數(shù),所以此刻就是一個(gè)生成器它的本質(zhì)還是迭代器然后執(zhí)行循環(huán) 這是一道魔性面試題,難倒了無數(shù)英雄好漢…… def add(n,i): return n+i def test(): for i...

    wudengzan 評(píng)論0 收藏0
  • JS算法題之leetcode(1~10)

    摘要:先去空白,去掉空白之后取第一個(gè)字符,判斷正負(fù)符號(hào),若是英文直接返回,若數(shù)字則不取?;匚臄?shù)題目描述判斷一個(gè)整數(shù)是否是回文數(shù)?;匚臄?shù)是指正序從左向右和倒序從右向左讀都是一樣的整數(shù)。 JS算法題之leetcode(1~10) 前言 一直以來,前端開發(fā)的知識(shí)儲(chǔ)備在數(shù)據(jù)結(jié)構(gòu)以及算法層面是有所暫缺的,可能歸根于我們的前端開發(fā)的業(yè)務(wù)性質(zhì),但是我認(rèn)為任何的編程崗位都離不開數(shù)據(jù)結(jié)構(gòu)以及算法。因此,我作為...

    SoapEye 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<