/** * 首先,針對這個數組作一個去重處理,避免你在後面取數據的時候,由於取到相同的元素而又要多去取一次隨機數 * 將獲取到的不重複的數組,再到這裏樣本里面去取隨機數 * 每取到一次,就將這個元素從 「不重複的數組」 中刪除,這樣length就會 減1 * 最後返回咱們取到的數組,就是不重複的數據 */ // array 傳入的數組--去重 function unique(array) { let arr = []; for(let i in array) { if(arr.indexOf(array[i] < 0)) { arr.push(array[i]); } } return arr; } // 篩選指定個數的數據 function filterData(origin,number) { // 1.先將數據去重,若是沒有重複的,就跳過這一步 let uniqueArr = unique(origin); // 二、number個數確定要小於或者等於去重後數組的個數 if(number> uniqueArr) { return; } let arr = []; let random,tempData; for(let i=0;i<number; i++) { // 產生隨機數 random = parseInt(Math.random()*(uniqueArr.length-1)); // 將挑選的單個數據從uniqueArr這個樣本中剝離出去,因此length會逐漸減少 tempData = uniqueArr.splice(uniqueArr[random],1); // 由於tempData是一個length爲1的數組,因此,裏面的數據有多是字符串,數字,對象,數組 // 注意,不要直接寫成arr.push(tempData); 由於你這樣你產生的arr實際上是一個數組裏面嵌套數組的 就像這樣 [["a"],["b"]....] arr.push(tempData[0]); } return arr; } // 原始數據 var originData = [1,2,3,4,5,6,7,8,"9aa","sdd","aaq","qq","ww","e","r","t","y","u","i","v","b","n","j","k","i",{"a":1},{"b":2}]; console.log(filterData(originData,6));