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);
    
    // 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));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM