需求描述:从一组有序的数据中生成一组随机并且不重复的数,类似于简单的抽奖程序的实现。
先来生成一个有序的数组:
var arr = [], length = 100, i = 0; for( ; i < length; i++ ){ arr.push( i ); }
从一个长度为 100 的有序数组中随机拿出 10 个随机的数,并且不能有重复。
需求描述:从一组有序的数据中生成一组随机并且不重复的数,类似于简单的抽奖程序的实现。
先来生成一个有序的数组:
var arr = [], length = 100, i = 0; for( ; i < length; i++ ){ arr.push( i ); }
从一个长度为 100 的有序数组中随机拿出 10 个随机的数,并且不能有重复。
有时会碰上这种需求,需要将数组中重复的元素删除掉,而只保留一个。最先想到的办法很可能就是用2个for循环来做比较然后去除掉重复的元素,代码如下所示:
方法1:
Array.prototype.distinct = function(){ var arr = [], len = this.length; for ( var i = 0; i < len; i++ ){ for( var j = i+1; j < len; j++ ){ if( this[i] === this[j] ){ j = ++i; } } arr.push( this[i] ); } return arr; };
使用方法1如果碰到数据比较多时性能上会差很多。那么请继续看下面的方法。
方法2:
Array.prototype.distinct = function(){ var self = this, arr = self.concat().sort(); // 创建一个新数组并排序 arr.sort(function( a, b ){ if( a === b ){ var n = self.indexOf( a ); //获取索引值 self.splice( n, 1 ); } }); return self; };