昨天笔试的时候遇到一个题目,给Array原型添加一个方法,要求去除数组重复元素:Array.prototype.deleteEle=function(){
var o={},newArr=[],i,j;
for( i=0;i<this.length;i++){
if(typeof(o[this[i]])=="undefined")
{
o[this[i]]="";
}
}
for(j in o){
newArr.push(j)
}
return newArr;
}这是我自己学的一个,请大家看看还有没有其它的方法?
var o={},newArr=[],i,j;
for( i=0;i<this.length;i++){
if(typeof(o[this[i]])=="undefined")
{
o[this[i]]="";
}
}
for(j in o){
newArr.push(j)
}
return newArr;
}这是我自己学的一个,请大家看看还有没有其它的方法?
然后循环取值判断
跟上一个取值相同即删除
alert(arr.reverse().join(",").match( /([^,]+)(?!.*\1)/ig).reverse());
用var arr=["ba","bc","a","c","b","a"];测试就会不正确
修改为这样:
var arr=["a","b","c","a","ba","bc"];
alert(arr.join(",").match( /([^,]+)(?!.*,\1(,|$))/ig));
var ret = [], record = {},it,tmp,obj = "__object__", bak = [],i,len;
var type ={
"number": function(n) { return "__number__" + n; },
"string": function(n) { return "__string__" + n; },
"boolean": function(n) { return "__boolean__" + n; },
"undefined": function(n) { return "__undefined__"; },
"object": function(n) {
return n === null ? "__null__" : obj in n ? n[obj] : ( n[obj] = obj + bak.push(n) );
}
};
for (i = 0, len = array.length; i < len; i++) {
it = array[i]; tmp = type[typeof it](it);
if (!(tmp in record)) { ret.push(it); record[tmp] = true; }
}
for (i = 0, len = bak.length; i < len; delete bak[i++][obj]) { }
return ret;
};
可以参考这个
//数组A,B,排除A,B重复的,组成新数组h,如果排除一个,只要循环A,如果还有C数组,自己再加
var h=new Array();
for(i=0;i<A.length;i++)
{ eval("h['"+s_sp[i]+"']=s_sp[i]")
}
for(i=0;i<b.length;i++)
{ eval("h['"+s_sp[i]+"']=s_sp[i]")
}
使用reverse能保证原数组顺序
,首先变量缓存数组this,
然后数组添加元素push可能会慢一点
添加了类似判断,Array.prototype.deleteEle=function(){
var arr=this,o={},newArr=[],i,n;
for( i=0;i<arr.length;i++){
n=arr[i]+typeof(arr[i]);//如果不需要类型判断,直接将后面的去掉即可
if(typeof(o[n])==="undefined"){
newArr[newArr.length]=arr[i]
o[n]=1;//缓存
}
}
return newArr;
}
尽量避免用eval,这里明明没必要用的,
reverse是什么 意思?
var newArr = this;
for (var i=newArr.length-1; i>=0; i--)
{
var targetNode = newArr[i];
for (var j=0; j<i; j++)
{
if(targetNode == newArr[j]){
newArr.splice(i,1);
//alert(arr);
break;
}
}
}
return newArr;
}
var arr = ["a","b","c","c","ab","d","ab","d","c"];
alert(arr.deleteEle());
Array.prototype.distinct=function(){
var a=[],b=[];
for(var prop in this){
var d = this[prop];
if (d===a[prop]) continue; //防止循环到prototype
if (b[d]!=1){
a.push(d);
b[d]=1;
}
}
return a;
}
<script language="javascript">
var rowValue="";
for(var i=0;i<rowid.length;i++){
var rowidvaleu = rowid[i];
if(rowValue == rowidvaleu){
//删除重复的数据
rowid.removeSplice(i);
}
rowValue= rowidvaleu;
}/**以用splice来实现
*方法:Array.removeSplice(index)
* 功能:删除数组元素.
* 参数:index删除元素的下标.
* 返回:在原数组上修改数组
*/
Array.prototype.removeSplice = function(index)
{
if(isNaN(index)||index>this.length){
return false;
}
this.splice(index,1);
}
</script>