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

/**
*    首先,針對這個數組作一個去重處理,避免你在後面取數據的時候,由於取到相同的元素而又要多去取一次隨機數
*    將獲取到的不重複的數組,再到這裏樣本里面去取隨機數
*    每取到一次,就將這個元素從 「不重複的數組」 中刪除,這樣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));
相關文章
相關標籤/搜索