需求描述:从一组有序的数据中生成一组随机并且不重复的数,类似于简单的抽奖程序的实现。
先来生成一个有序的数组:
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;
};