从数组中随机取x条不重复数据的JS代码

  工作中经常遇到有关数组的一些操作

  1. 从数据中随机取x条不重复的数据 (PS:下面的S.each是KISSY.each方法,大家可以改为for循环)

  

复制代码 代码如下:

  /*

  从数组arr中随机取x条不重复的数据

  */

  function myRand(arr,num){

  var newArr = [];

  rand(num);    //随机 x 个

  function rand(k){

  if(k==0){

  return;

  }

  var index = Math.floor(Math.random() * arr.length);

  var flag = true;

  S.each(newArr,function(v){

  if(v == arr[index]){

  flag = false;

  }

  });

  if(flag){

  newArr.push(arr[index]);

  k--;

  }

  rand(k);

  }

  return newArr;

  }

  2.从对象中随机取x条不重复的数据

  

复制代码 代码如下:

  /*

  随机从对象obj中取x条

  */

  function myRand(){

  var S = KISSY;

  var obj={

  '01':{name:'a'},

  '02':{name:'b'},

  '03':{name:'c'},

  '04':{name:'d'},

  '05':{name:'e'},

  '06':{name:'f'},

  '07':{name:'g'},

  '08':{name:'h'},

  '09':{name:'i'},

  '10':{name:'g'}

  };

  var arr = [];

  S.each(obj,function(v,k){

  arr.push(k);

  });

  //随机取3个

  var newArr = myRand(arr,3);

  S.each(newArr,function(b){

  console.log(obj[b]);

  })

  };

  3. 去除数组的重复项

  

复制代码 代码如下:

  /*

  去除数组的重复项

  */

  function uniqArr(arr){

  function toObject(a) {

  var o = {};

  for (var i=0, j=a.length; i<j; i=i+1) {

  o[a[i]] = true;

  }

  return o;

  };

  function keys(o) {

  var a=[], i;

  for (i in o) {

  if (o.hasOwnProperty(i)) { // 这里, YUI源码中是lang.hasOwnProperty(o, i)

  a.push(i);

  }

  }

  return a;

  };

  return keys(toObject(arr));

  }