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

資訊專欄INFORMATION COLUMN

如何隨機(jī)&&去重返回新數(shù)組

Apollo / 2599人閱讀

摘要:?jiǎn)栴}起因姐毫無(wú)征兆的在我們的水群里發(fā)來(lái)一段代碼她的目的是想從中隨機(jī)抽取個(gè)不重復(fù)的值組成一個(gè)新數(shù)組問(wèn)我代碼是否有問(wèn)題很遺憾因?yàn)槲覄偹央S便貼了一下代碼運(yùn)行了一下就說(shuō)沒(méi)問(wèn)題很快我就被打臉了也是如果沒(méi)問(wèn)題的話她問(wèn)個(gè)毛大家可以先找一下問(wèn)題下面先

1.問(wèn)題起因

W姐毫無(wú)征兆的在我們的水群里發(fā)來(lái)一段代碼:

var arr = [{q:"1+1=?",a:"2",b:"3",c:"1"},{q:"1+2=?",a:"2",b:"3",c:"7"},{q:"1+0=?",a:"8",b:"3",c:"1"},{q:"1+7=?",a:"8",b:"3",c:"7"},{q:"2+2=?",a:"4",b:"7",c:"1"},{q:"1+3=?",a:"2",b:"4",c:"6"},{q:"1+70=?",a:"72",b:"73",c:"71"},{q:"1+18=?",a:"22",b:"19",c:"21"},{q:"7+11=?",a:"18",b:"23",c:"21"}];
  var resArr = [];
  for(var i = 0; i<5; i++){
    var index = parseInt(Math.random()*10);
    resArr.push(arr[index]);
    for( var j = 0; j

她的目的是想從arr中隨機(jī)抽取5個(gè)不重復(fù)的值組成一個(gè)新數(shù)組resArr.問(wèn)我代碼是否有問(wèn)題,很遺憾因?yàn)槲覄偹?隨便貼了一下代碼,運(yùn)行了一下就說(shuō)沒(méi)問(wèn)題...很快我就被打臉了(也是,如果沒(méi)問(wèn)題的話她問(wèn)個(gè)毛..).
大家可以先找一下問(wèn)題,下面先更正這段代碼,然后再給出群里剩下兩位大哥的解決方法.

2.代碼更正

首先先貼出更正后的代碼:

 for(var i = 0; i<5; i++){
        var index = parseInt(Math.random()*arr.length);//限制范圍
            resArr.push(arr[index]);
        //每次只需要最后一個(gè)壓入數(shù)組的元素resArr[i]與之前所有元素進(jìn)行比較
        //若遇到重復(fù)的,將resArr[i]彈出并終止循環(huán)即可
        for( var j = 0; j

錯(cuò)的原因就是注釋里的,我居然一眼沒(méi)看出來(lái),真是深感慚愧...看來(lái)不能眼高手低,得多敲代碼了.

3.其它解決方法

我們4人水群里me和另外兩位也給出了不同的思路.

3.1水貨me給出的思路

作為小水貨的我,當(dāng)時(shí)沒(méi)有立刻看出來(lái)錯(cuò)誤的地方,所以直接又寫了一個(gè)水水的方法,請(qǐng)大家不要見(jiàn)笑....

function solve(arr,num){
    var resArr=[],indexArr=[];
    for (var j = 0; j < arr.length; j++) {
        indexArr[j] = 0;
    }
    for(var i=0;i

這里主要使用一個(gè)數(shù)組indexArr作為一個(gè)表記錄已經(jīng)被選擇過(guò)值,若出現(xiàn)重復(fù)則直接跳過(guò).

3.2YC大神給出的解決方法

YC大神作為我們中薪水最高,加班時(shí)間最長(zhǎng)的,百忙中抽出時(shí)間給出了自己的解決方案,在此替W姐感謝過(guò)勞肥的YC大神.

function filter(arr, num) {
        var newArr = [];
        //隨機(jī)刪并返回一個(gè)值,因?yàn)樵瓟?shù)組進(jìn)行了刪除操作,就避免了查重
        var pick = function () {
            var index = Math.ceil((arr.length * Math.random())) - 1;
            return arr.splice(index, 1);
        }
        for (var i = 0; i < num; i++) {
           // newArr.push(pick()[0])//這樣寫就不用數(shù)組扁平化了
            newArr.push(pick());
        }
        return newArr
    }
    //數(shù)組扁平化
    function flatten(arr) {
        return arr.reduce(function (prev, item) {
            return prev.concat(Array.isArray(item) ? flatten(item) : item);
        }, []);
    }
    var b=flatten(filter(arr, 5))
    console.log(b)

因?yàn)橐婚_(kāi)始看到返回值的時(shí)候就想到一個(gè)叫做數(shù)組扁平化的東西,很悲慘的是只記得名字忘記了實(shí)現(xiàn)方案,所以趁此復(fù)習(xí)一下.這個(gè)方案不好的一點(diǎn)就是修改了原數(shù)組,這樣就無(wú)發(fā)復(fù)用該數(shù)組,解決方法是可以在函數(shù)中進(jìn)行一個(gè)深拷貝,使用新數(shù)組進(jìn)行操作避免修改原數(shù)組.

3.3joker大哥的解決方案

joker大哥作為我們中身材和臉最好的,以驕傲的姿態(tài)給出了我們幾個(gè)公認(rèn)最優(yōu)的解決方案.

//核心是隨機(jī)排序,對(duì)傳入的o進(jìn)行o.length次的隨機(jī)交換,并使用slice進(jìn)行截取返回
var shuffle = function (o, num) { 
        for (var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x) ;
        return o.slice(0, 5);
    };
    console.log(shuffle(arr))

slice()方法返回原數(shù)組的一個(gè)淺復(fù)制,不修改原數(shù)組內(nèi)容.而且效率也高,只用到了一個(gè)for循環(huán),如果說(shuō)有缺點(diǎn)的話就是可讀性略差一些,下面展開(kāi)一下:

 var newShuffle=function(o,num){
        var j,tmp,i=o.length;
        while(i){
            j=parseInt(Math.random() * i);
            tmp=o[--i];
            o[i]=o[j];
            o[j]=tmp;
            
        }
        return o.slice(0,num)
    }
  console.log(newShuffle(arr,5))
4如果大家發(fā)現(xiàn)和我內(nèi)容差別不大的博客內(nèi)容

那個(gè)就是w姐的博客..欺負(fù)我打字慢..

W姐的博客地址

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

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

相關(guān)文章

  • Python &amp; JavaScript 的數(shù)組去重

    摘要:數(shù)組去重是實(shí)際應(yīng)用中常用的操作,出現(xiàn)在面試題中的概率也很高,今天簡(jiǎn)述一下和中數(shù)組去重的方法數(shù)組去重此時(shí)未保持原有的順序,對(duì)進(jìn)行排序數(shù)組去重如過(guò)該元素在數(shù)組中第一次出現(xiàn)的位置該元素當(dāng)前的位置將符合條件的元素加入到中 數(shù)組去重 是實(shí)際應(yīng)用中常用的操作,出現(xiàn)在面試題中的概率也很高,今天簡(jiǎn)述一下 Python 和 JavaScript 中數(shù)組去重的方法 python數(shù)組去重 >>> a = [...

    cppowboy 評(píng)論0 收藏0
  • Python &amp; JavaScript 的數(shù)組去重

    摘要:數(shù)組去重是實(shí)際應(yīng)用中常用的操作,出現(xiàn)在面試題中的概率也很高,今天簡(jiǎn)述一下和中數(shù)組去重的方法數(shù)組去重此時(shí)未保持原有的順序,對(duì)進(jìn)行排序數(shù)組去重如過(guò)該元素在數(shù)組中第一次出現(xiàn)的位置該元素當(dāng)前的位置將符合條件的元素加入到中 數(shù)組去重 是實(shí)際應(yīng)用中常用的操作,出現(xiàn)在面試題中的概率也很高,今天簡(jiǎn)述一下 Python 和 JavaScript 中數(shù)組去重的方法 python數(shù)組去重 >>> a = [...

    wuyangnju 評(píng)論0 收藏0
  • python數(shù)學(xué)建模Numpy應(yīng)用介紹與Pandas學(xué)習(xí)

      小編寫這篇文章的主要目的,主要是來(lái)給大家解答下關(guān)于python數(shù)學(xué)建模的一些相關(guān)的介紹,涉及到內(nèi)容涵蓋Numpy的一些相關(guān)的應(yīng)用具體的一些介紹。另外,還會(huì)涉及到相關(guān)的Pandas學(xué)習(xí)知識(shí),具體內(nèi)容下面給大家詳細(xì)解答下?! ? Numpy介紹與應(yīng)用  1-1Numpy是什么  NumPy是一個(gè)運(yùn)行速度非常快的數(shù)學(xué)庫(kù),一個(gè)開(kāi)源的的python科學(xué)計(jì)算庫(kù),主要用于數(shù)組、矩陣計(jì)算,包含:  一個(gè)強(qiáng)大的...

    89542767 評(píng)論0 收藏0
  • JS數(shù)組中filter方法的使用實(shí)例

      1、定義  filter() 方法創(chuàng)建一個(gè)新數(shù)組, 其包含通過(guò)所提供函數(shù)實(shí)現(xiàn)的測(cè)試的所有元素。  2、語(yǔ)法  var newArray = arr.filter(callback(element[, index[, selfArr]])[, thisArg])   3、參數(shù)說(shuō)明  callback  循環(huán)數(shù)組每個(gè)元素時(shí)調(diào)用的回調(diào)函數(shù)。回調(diào)函數(shù)返回 true 表示保留該元素,false 則不保留...

    3403771864 評(píng)論0 收藏0
  • python數(shù)學(xué)建模之Numpy應(yīng)用介紹與Pandas學(xué)習(xí)

      小編寫這篇文章的一個(gè)主要目的,主要是來(lái)給大家去做一個(gè)介紹。介紹的內(nèi)容主要是關(guān)于建模知識(shí)的一些相關(guān)介紹,包括其Pandas的一些相關(guān)學(xué)習(xí),就具體的操作內(nèi)容,下面就給大家詳細(xì)解答下?! umpy學(xué)習(xí)  1 Numpy介紹與應(yīng)用  1-1Numpy是什么  NumPy是一個(gè)運(yùn)行速度非??斓臄?shù)學(xué)庫(kù),一個(gè)開(kāi)源的的python科學(xué)計(jì)算庫(kù),主要用于數(shù)組、矩陣計(jì)算,包含:  一個(gè)強(qiáng)大的N維數(shù)組對(duì)象ndarr...

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

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

0條評(píng)論

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