function unique(data){
data = data || [];
var a = {};
for (var i=0; i<data.length; i++) {
var v = data[i];
if (typeof(a[v]) == 'undefined'){
a[v] = 1;
}
};
data.length=0;
for (var i in a){
data[data.length] = i;
}
return data;
}var arr = [9,1,3,8,7,7,6,6,5,7,8,8,7,4,3,1];
alert(unique(arr));
我在网上看到了这段代码,可是看不懂
哪位高手给解释一下行吗?跪求了
data = data || [];
var a = {};
for (var i=0; i<data.length; i++) {
var v = data[i];
if (typeof(a[v]) == 'undefined'){
a[v] = 1;
}
};
data.length=0;
for (var i in a){
data[data.length] = i;
}
return data;
}var arr = [9,1,3,8,7,7,6,6,5,7,8,8,7,4,3,1];
alert(unique(arr));
我在网上看到了这段代码,可是看不懂
哪位高手给解释一下行吗?跪求了
function unique(data){
if(!data||!data.length){return;}
var l = data.length,a = {},v = null;
for(var i=0;i<l;i++){/*遍历数组*/
v = data[i];/*取当前数值*/
if (v in a){/*如果该数值在hash表a中存在则移除*/
data.splice(i,1);
i--,l--;
continue;
}
a[v] = 1;/*否则将该值加入到hash表a*/
};
a = null;
return data;
}var arr = [9,1,3,8,7,7,6,6,5,7,8,8,7,4,3,1];
alert(unique(arr));
</script>
data = data || [];
var a = {}; //声明一个对象,JavaScript中的对象可以当哈希表用
for (var i=0; i <data.length; i++) {
a[data[i]] = true; //设置标记,把数组的值当下标,这样就可以去掉重复的值
};
data.length=0;
for (var i in a){ //遍历对象,把已标记的还原成数组
data[data.length] = i;
}
return data;
}
var arr = [9,1,3,8,7,7,6,6,5,7,8,8,7,4,3,1];
alert(unique(arr));
不知道有没说清楚?
if (!data instanceof Array) return;
var h = {}, v;
for (var i = data.length - 1; i >= 0; i--) {
var v = data[i];
if (h[v]) data.splice(i,1);
else h[v] = true;
}
h = null;
return data;
}混点分,倒序遍历就不用i--了。
一会测试一下性能。
var arr = [9,1,3,8,7,7,6,6,5,7,8,8,7,4,3,1];
arr = arr.sort().join("").replace(/([\d])\1*/g,"$1").split("");
alert(arr);
</script>
// 楼上的几位貌似都没考虑 弱性判断
<script type="text/javascript">
var inArray = function(arr, elt) {
for(var i = 0, len = arr.length; i < len; i++) {
if(arr[i] === elt) {
return true;
}
}
return false;
};
var unique = function(arr) {
if(arr.length < 2) return arr;
var i = 0, len = arr.length; re = [];
for(; i < len; i++) {
if(!this.inArray(re, arr[i])) {
re.push(arr[i]);
}
}
return re;
};
var arr = [9,1,'3',8,7,7,6,6,5,7,8,8,7,4,3,1]; // 这里的3 和 '3' 类型是不一致的,.,
alert(unique(arr));</script>
// 我认为 还是用inArray判断比较安全
//如果不需要考虑类型的问题 我也在给出一款<script type="text/javascript">
var uniq = function (arr) {
var a = [],
o = {},
i,
v,
len = arr.length;
if (len < 2) {
return arr;
}
for (i = 0; i < len; i++) {
v = arr[i];
if (o[v] !== 1) {
a.push(v);
o[v] = 1;
}
}
return a;
}
var arr = [9,1,'3',8,7,7,6,6,5,7,8,8,7,4,3,1];
alert(uniq(arr));</script>
unique: function( array ) {
var ret = [], done = {}; try { for ( var i = 0, length = array.length; i < length; i++ ) {
var id = jQuery.data( array[ i ] ); if ( !done[ id ] ) {
done[ id ] = true;
ret.push( array[ i ] );
}
} } catch( e ) {
ret = array;
} return ret;
}