今天碰到一個需求,一個頁面顯示贊助廠商的信息,可是廠商要求排序要隨機排,由於是個靜態頁面不是讀取數據庫的,因此打算用js來控制數據庫
var arr = new Array('張三', '李四', '王五', '趙六', '田七', '哈哈', '呵呵', '麼麼');
var brr = new Array(); var len1 = arr.length; var str = ""; //debugger; while (brr.length <= 8) { var index = parseInt(Math.random() * (len1)); for (var j = 0; j < brr.length; j++) { if (brr.indexOf(arr[index])==-1) { brr.push(arr[index]); //if (arr[index] != undefined) { str += arr[index] + "、"; //} arr.splice(index, 1); } } if (brr.length==0) { brr.push(arr[index]); //if (arr[index] != undefined) { str += arr[index] + "、"; //} arr.splice(index, 1); } } console.log(str)
嘴笨不知道怎麼描述思路,我就把幾個版本都放上來,你們慢慢看應該是能夠看明白的數組
while (brr.length <= arr.length) { var index = parseInt(Math.random() * (len1)); if (brr.length==0) { brr.push(arr[index]);//第一次添加 } if (arr[index] != undefined) { //由於加一個後會去掉數據源的一個選項,因此有時候會有索引沒值 brr.push(arr[index]); str += arr[index] + "、"; arr.splice(index, 1); } }
這樣就能夠實現不重複隨機排序指定內容了,可是仍是有undefined的狀況dom
while (arr.length) { str += arr.splice(parseInt(Math.random() * arr.length), 1)[0] ; }
最終版本,我隨機刪除其中一個元素,而後把這個元素輸出,就避免了undefined的狀況了,可是這種作法的弊端是這時候arr數組就沒有數據了,若是須要作定時刷新就不能夠了,必須是手動刷新纔會隨機加載,若是須要作定時刷新仍是須要新建一個數組,而後往裏面插入元素,加一個定時器就能夠實現定時刷新內容了。由於個人需求是手動刷新,因此用了最後的版本簡潔大方。作了整整一下午大概改版了七八次,感受還不錯發個博客小小得瑟下,但願幫到別人spa