摘要:?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è)毛..).
2.代碼更正
大家可以先找一下問(wèn)題,下面先更正這段代碼,然后再給出群里剩下兩位大哥的解決方法.首先先貼出更正后的代碼:
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
摘要:數(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 = [...
摘要:數(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 = [...
小編寫這篇文章的主要目的,主要是來(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)大的...
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 則不保留...
小編寫這篇文章的一個(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...
閱讀 783·2021-10-09 09:58
閱讀 644·2021-08-27 16:24
閱讀 1729·2019-08-30 14:15
閱讀 2389·2019-08-30 11:04
閱讀 2076·2019-08-29 18:43
閱讀 2171·2019-08-29 15:20
閱讀 2722·2019-08-26 12:20
閱讀 1620·2019-08-26 11:44