周五,快下班了,正收拾東西準備走人,專案經理突然讓我給他做個excel,1000個數字加字母組合的密碼,不重複,下班前給。
我直接懵了,excel不會,估計是要寫個什麼命令才能生成出來,於是想著有沒有什麼軟體可以生成,找了一會兒還是放棄了。等著下班回家呢,自己來吧。
廢話少說,上**。
<div
id="keys"
>
div>
<
script
>
//生成十位字母加數字隨機數
vararr =;
for(
vari=0
;i<
1000
;i++
)
//去重
varukeys =;
for(
vari =0
; i
<
arr.length; i
++)
}//陣列處理,便於在html文件中顯示
varkeys =''
;
for(
vari=0
;i<
ukeys.length;i
++)
$('#keys
').html(keys);
console.log(
'去重後的密碼個數:'+
math.random()輸出0到1(包括0,不包含1)的隨機數。
tostring(16)將隨機數轉換為16進製制的字串。
substring(2, 10)擷取字串,因為隨機數大於等於0小於1,前兩位是 "0." , substring(2, 10)從第三位開始擷取十位。
去重。檢查陣列中的每乙個元素,如果當前元素在新的陣列中已經存在則忽略,否則加入倒新陣列中。最後得到的新陣列就是所要的不重複的密碼。
至此已經得到了1000個數字加字母組合的密碼,而且不重複,但是由於要拷貝到excel中,如果直接在控制台中列印然後複製,結果是這樣的:
randomcode.html:23 ud6202zt55
randomcode.html:23 oqu89g76tu
randomcode.html:23 m5cibg4jv1
因此需要對結果進行格式化以方便複製,如下:
即在每一項元素後面新增乙個換行標籤
, 然後在頁面中顯示出來,效果如下:
然後全選貼上到excel就ok啦。
小結:生成金鑰陣列主要用到了js的 math.random() 、tostring(36)、substr(start, n)方法,關鍵在於數值轉換成16進製制字串的過程。
陣列去重主要用到了 indexof() 方法。陣列去重是個十分經典的問題,方法很多,個人認為使用indexof()逐項排除是最簡單的,其他的方法有時間也需要研究一下。
整個過程的**還是十分簡單和基礎的,照這樣的方法,只要系統承受得了,生成十萬個一百萬個數十位不重複的金鑰也是沒有任何問題的。
100億資料找出最大的1000個數字
這是網際網路領域乙個比較經典的演算法問題 top k 如何在巨大的資料中找出最大,或者訪問量最高的前10個,前100個或者前1000個資料。比如在2億使用者記錄中找出信用等級最高的,在上億個搜尋詞彙中找出被搜尋次數最高的10個關鍵字。前提是資料儲存在檔案中 一般遇到這個問題,第一反應會想到排序,但是...
100億資料找出最大的1000個數字
轉於 1 最容易想到的方法是將資料全部排序。該方法並不高效,因為題目的目的是尋找出最大的10000個數即可,而排序卻是將所有的元素都排序了,做了很多的無用功。2 區域性淘汰法。用乙個容器儲存前10000個數,然後將剩餘的所有數字一一與容器內的最小數字相比,如果所有後續的元素都比容器內的10000個數...
JS生成隨機的由字母數字組合的字串
最近有個需求,是需要生成3 32位長度的字母數字組合的隨機字串,另乙個是生成43位隨機字串。很有意思,研究了一下,基本上tostring後的引數規定可以是2 36之間的任意整數,不寫的話預設是10 也就是十進位制 此時返回的值就是那個隨機數。所以如果想得到一長串的隨機字元,則需使用乙個 10 且是奇...