摘要:準(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
摘要:來自雨夜帶刀需求描述從一組數(shù)組中找出一組按不同順序排列的字符串的數(shù)組元素。最后用編碼和作為對(duì)象的來保存編碼和一致的字符串。方法方法是將字符串轉(zhuǎn)換成數(shù)組后再對(duì)數(shù)組進(jìn)行排序,和使用排序后會(huì)變成,將拍好序的字符串作為對(duì)象的來保存排序一致的字符串。 (準(zhǔn)備面試,多看點(diǎn)題。來自雨夜帶刀s Blog ) 需求描述:從一組數(shù)組中找出一組按不同順序排列的字符串的數(shù)組元素。假如有這樣一個(gè)數(shù)組: [ ...
摘要:這是一道魔性面試題,難倒了無數(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...
摘要:先去空白,去掉空白之后取第一個(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)以及算法。因此,我作為...
閱讀 1452·2021-09-23 11:21
閱讀 3140·2019-08-30 14:14
閱讀 3221·2019-08-30 13:56
閱讀 4181·2019-08-30 11:20
閱讀 1981·2019-08-29 17:23
閱讀 2801·2019-08-29 16:14
閱讀 1730·2019-08-28 18:18
閱讀 1512·2019-08-26 12:14