js從數組中取出n個不重復的數據
阿新 • • 發佈:2018-04-02
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個不重復的數據