JS中的数组去重复元素

去掉数组中的重复元素,在JS中即可以利用常规方法来一一比较,然后把其中的不重复元素加入到结果数组中,也可以利用JS中的对象特性来完成特定数组类型的去重。因为在JS中它是非强类型的语言,所以在我们的数组中会出现object, function, number, string, null, undefined, bool.如果是这种情况,下列列出的代码有可能不能完成。

常规方法

遍历最初的数组,拿出一个元素,和结果数组中的每一个进行比较,如果没有重复,即将新元素插入结果数组。

View Code
var originalArray=["test","0", 1,"1",1,0,"0"],

    index=0,

    len=originalArray.length,

    result=[],

    tempElem,

    resultIndex=0,

    resultLength;

    duplicated=false;
 

for(index=0;index<len;index=index+1){

  temp=originalArray[index];

  resultLength=result.length;

  duplicated=false;

  for(resultIndex=0;resultIndex<resultLength; resultIndex++){   

    if(temp ===result[resultIndex]){     

      duplicated=true;

      break;

    }

  }

  if(!duplicated){      

    result.push(temp);

  }

}

console.log(result);

优势在于,我们可以不用考虑前面所述的各种数组类型问题,因为它进行的是严格比较===

 

利用in关键字:

View Code
var originalArray=["test","0", 1,"1",1,0,"0"],

    index=0,

    len=originalArray.length,

    result=[],

    tempElem,

    resultIndex=0,

    resultLength;

    duplicated=false;


for( index=0; index<len; index=index+1){

  temp=originalArray[index];

  if(!(temp in result)){

    result.push(temp);

  }

}

 

console.log(result);

这个方法,代码看起来非常简捷,但是结果并不是非常正确,因为它会进行数组转换,即'0'和0是一致的。

利用object的property:

View Code
var originalArray=["test","0", 1,"1",1,0,"0"],

    index=0,

    len=originalArray.length,

    result=[],

    tempElem,

    resultIndex=0,

    resultLength,

    duplicated=false,

    obj={};

for( index=0; index<len; index=index+1){

  temp=originalArray[index];

  obj[temp]=temp;

}

obj.length=len;//实现可以在后边的转化

result=Array.prototype.slice.call(obj,0);

console.log(result);

 

posted @ 2012-09-10 22:22  moonreplace  阅读(1359)  评论(0编辑  收藏  举报