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

原文地址:https://www.cnblogs.com/xiaqilin/p/8693111.html

时间: 2024-08-30 14:07:39

js从数组中取出n个不重复的数据的相关文章

js去除数组中的重复值

hasOwnProperty(property) 方法 JavaScript中hasOwnProperty函数方法是返回一个布尔值,指出一个对象是否具有指定名称的属性. 使用方法: object.hasOwnProperty(proName) 其中参数object是必选项.一个对象的实例.proName是必选项.一个属性名称的字符串值. 如果 object 具有指定名称的属性,那么JavaScript中hasOwnProperty函数方法返回 true:反之则返回 false.此方法无法检查该对

js删除数组中的&#39;NaN&#39;

js中的NaN不和任何值相等,包括自身. 所以可以使用x!=x来判断x是否是NaN,当且仅当x为NaN时,表达式的结果为true. NaN != NaN //true 可以依此删除数组中的'NaN'. Array.prototype.delNaN = function () { var arr = []; for (var i = 0; i < this.length; i++) { if (this[i] === this[i]) { arr.push(this[i]); } } return

从一个整数数组中取出最大的整数,最小整数,总和,平均值

//从一个整数数组中取出最大的整数,最小整数,总和,平均值 //声明一个int类型的数组,并且随意的赋初值 int[] nums={1,2,3,4,5,6,7,8,9,0}; //声明两个变量用来存储最大值和最小值 int max=int.MinValue;//nums[0]; int min=int.MaxValue;//nums[0]; int sum=0; //循环的让数组中的每个元素跟我的最大值,最小值进行比较 for(int i=0;i<nums.Length;i++) { if(nu

js在数组中删除重复的元素自保留一个

js在数组中删除重复的元素自保留一个 第一种思路是:遍历要删除的数组arr, 把元素分别放入另一个数组tmp中,在判断该元素在arr中不存在才允许放入tmp中 用到两个函数:for ...in 和 indexOf() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <script type="text/javascript"> var student = ['qiang','ming','tao','li','liang','you','qiang'

js删除数组中的元素

js删除数组中的元素delete和splice的区别 例如有一个数组是 :var textArr = ['a','b','c','d']; 这时我想删除这个数组中的b元素: 方法一:delete 删除数组 delete textArr[1] 结果为: ["a",undefined,"c","d"] 只是被删除的元素变成了 undefined 其他的元素的键值还是不变. 方法二:aplice 删除数组 splice(index,len,[item]

前端JS:判断list(数组)中的json对象是否重复

前端JS:判断list(数组)中的json对象是否重复 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Test</title> <script> function displayDate(){ var arr = [{ d: '2015-10-12',C:'Apple'}, { d: '2015-10-12',C:'Apple'}

JS从数组中随机取出几个数组元素的方法

原文链接:http://caibaojian.com/js-get-random-elements-from-array.html js如何从一个数组中随机取出一个元素或者几个元素. 假如数组为· var items = ['1','2','4','5','6','7','8','9','10']; 1.从数组items中随机取出一个元素 var item = items[Math.floor(Math.random()*items.length)]; 2.从前面的一篇随机数组中随机取几个元素

JS 在指定数组中随机取出N个不重复的数据

/**思路:每次随机从数组抽出一个数放进新的数组,然后将这个数从原数组中剔除,这个就不会抽到重复的数了*/function makeRandomArr(arrList,num){ if(num>arrList.length){ return; } // var tempArr=arrList.concat(); var tempArr=arrList.slice(0); var newArrList=[]; for(var i=0;i<num;i++){ var random=Math.flo

JS删除数组中的某个元素

首先可以给js的数组对象定义一个函数,用于查找指定的元素在数组中的位置,即索引,代码为: 1 Array.prototype.indexOf = function(val) { 2 for (var i = 0; i < this.length; i++) { 3 if (this[i] == val) return i; 4 } 5 return -1; 6 }; 然后使用通过得到这个元素的索引,使用js数组自己固有的函数去删除这个元素: 代码为: 1 Array.prototype.remo