1. 程式人生 > >js從數組中取出n個不重復的數據

js從數組中取出n個不重復的數據

arr rda ray array clas RR gpo cti gin

/**
*    首先,針對這個數組做一個去重處理,避免你在後面取數據的時候,因為取到相同的元素而又要多去取一次隨機數
*    將獲取到的不重復的數組,再到這裏樣本裏面去取隨機數
*    每取到一次,就將這個元素從 “不重復的數組” 中刪除,這樣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); // 2、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));

js從數組中取出n個不重復的數據