摘要:問題起因姐毫無征兆的在我們的水群里發(fā)來一段代碼她的目的是想從中隨機(jī)抽取個不重復(fù)的值組成一個新數(shù)組問我代碼是否有問題很遺憾因為我剛睡醒隨便貼了一下代碼運(yùn)行了一下就說沒問題很快我就被打臉了也是如果沒問題的話她問個毛大家可以先找一下問題下面先
1.問題起因
W姐毫無征兆的在我們的水群里發(fā)來一段代碼:
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個不重復(fù)的值組成一個新數(shù)組resArr.問我代碼是否有問題,很遺憾因為我剛睡醒,隨便貼了一下代碼,運(yùn)行了一下就說沒問題...很快我就被打臉了(也是,如果沒問題的話她問個毛..).
2.代碼更正
大家可以先找一下問題,下面先更正這段代碼,然后再給出群里剩下兩位大哥的解決方法.首先先貼出更正后的代碼:
for(var i = 0; i<5; i++){ var index = parseInt(Math.random()*arr.length);//限制范圍 resArr.push(arr[index]); //每次只需要最后一個壓入數(shù)組的元素resArr[i]與之前所有元素進(jìn)行比較 //若遇到重復(fù)的,將resArr[i]彈出并終止循環(huán)即可 for( var j = 0; j錯的原因就是注釋里的,我居然一眼沒看出來,真是深感慚愧...看來不能眼高手低,得多敲代碼了.
3.其它解決方法我們4人水群里me和另外兩位也給出了不同的思路.
3.1水貨me給出的思路作為小水貨的我,當(dāng)時沒有立刻看出來錯誤的地方,所以直接又寫了一個水水的方法,請大家不要見笑....
function solve(arr,num){ var resArr=[],indexArr=[]; for (var j = 0; j < arr.length; j++) { indexArr[j] = 0; } for(var i=0;i這里主要使用一個數(shù)組indexArr作為一個表記錄已經(jīng)被選擇過值,若出現(xiàn)重復(fù)則直接跳過.
3.2YC大神給出的解決方法YC大神作為我們中薪水最高,加班時間最長的,百忙中抽出時間給出了自己的解決方案,在此替W姐感謝過勞肥的YC大神.
function filter(arr, num) { var newArr = []; //隨機(jī)刪并返回一個值,因為原數(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)因為一開始看到返回值的時候就想到一個叫做數(shù)組扁平化的東西,很悲慘的是只記得名字忘記了實(shí)現(xiàn)方案,所以趁此復(fù)習(xí)一下.這個方案不好的一點(diǎn)就是修改了原數(shù)組,這樣就無發(fā)復(fù)用該數(shù)組,解決方法是可以在函數(shù)中進(jìn)行一個深拷貝,使用新數(shù)組進(jìn)行操作避免修改原數(shù)組.
3.3joker大哥的解決方案joker大哥作為我們中身材和臉最好的,以驕傲的姿態(tài)給出了我們幾個公認(rèn)最優(yōu)的解決方案.
//核心是隨機(jī)排序,對傳入的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ù)組的一個淺復(fù)制,不修改原數(shù)組內(nèi)容.而且效率也高,只用到了一個for循環(huán),如果說有缺點(diǎn)的話就是可讀性略差一些,下面展開一下:
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)容那個就是w姐的博客..欺負(fù)我打字慢..
W姐的博客地址
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/93796.html
摘要:數(shù)組去重是實(shí)際應(yīng)用中常用的操作,出現(xiàn)在面試題中的概率也很高,今天簡述一下和中數(shù)組去重的方法數(shù)組去重此時未保持原有的順序,對進(jìn)行排序數(shù)組去重如過該元素在數(shù)組中第一次出現(xiàn)的位置該元素當(dāng)前的位置將符合條件的元素加入到中 數(shù)組去重 是實(shí)際應(yīng)用中常用的操作,出現(xiàn)在面試題中的概率也很高,今天簡述一下 Python 和 JavaScript 中數(shù)組去重的方法 python數(shù)組去重 >>> a = [...
摘要:數(shù)組去重是實(shí)際應(yīng)用中常用的操作,出現(xiàn)在面試題中的概率也很高,今天簡述一下和中數(shù)組去重的方法數(shù)組去重此時未保持原有的順序,對進(jìn)行排序數(shù)組去重如過該元素在數(shù)組中第一次出現(xiàn)的位置該元素當(dāng)前的位置將符合條件的元素加入到中 數(shù)組去重 是實(shí)際應(yīng)用中常用的操作,出現(xiàn)在面試題中的概率也很高,今天簡述一下 Python 和 JavaScript 中數(shù)組去重的方法 python數(shù)組去重 >>> a = [...
小編寫這篇文章的主要目的,主要是來給大家解答下關(guān)于python數(shù)學(xué)建模的一些相關(guān)的介紹,涉及到內(nèi)容涵蓋Numpy的一些相關(guān)的應(yīng)用具體的一些介紹。另外,還會涉及到相關(guān)的Pandas學(xué)習(xí)知識,具體內(nèi)容下面給大家詳細(xì)解答下。 1 Numpy介紹與應(yīng)用 1-1Numpy是什么 NumPy是一個運(yùn)行速度非??斓臄?shù)學(xué)庫,一個開源的的python科學(xué)計算庫,主要用于數(shù)組、矩陣計算,包含: 一個強(qiáng)大的...
1、定義 filter() 方法創(chuàng)建一個新數(shù)組, 其包含通過所提供函數(shù)實(shí)現(xiàn)的測試的所有元素?! ?、語法 var newArray = arr.filter(callback(element[, index[, selfArr]])[, thisArg]) 3、參數(shù)說明 callback 循環(huán)數(shù)組每個元素時調(diào)用的回調(diào)函數(shù)?;卣{(diào)函數(shù)返回 true 表示保留該元素,false 則不保留...
小編寫這篇文章的一個主要目的,主要是來給大家去做一個介紹。介紹的內(nèi)容主要是關(guān)于建模知識的一些相關(guān)介紹,包括其Pandas的一些相關(guān)學(xué)習(xí),就具體的操作內(nèi)容,下面就給大家詳細(xì)解答下?! umpy學(xué)習(xí) 1 Numpy介紹與應(yīng)用 1-1Numpy是什么 NumPy是一個運(yùn)行速度非??斓臄?shù)學(xué)庫,一個開源的的python科學(xué)計算庫,主要用于數(shù)組、矩陣計算,包含: 一個強(qiáng)大的N維數(shù)組對象ndarr...
閱讀 774·2021-10-09 09:58
閱讀 642·2021-08-27 16:24
閱讀 1724·2019-08-30 14:15
閱讀 2385·2019-08-30 11:04
閱讀 2068·2019-08-29 18:43
閱讀 2170·2019-08-29 15:20
閱讀 2717·2019-08-26 12:20
閱讀 1617·2019-08-26 11:44