JS中的数组去重复元素
去掉数组中的重复元素,在JS中即可以利用常规方法来一一比较,然后把其中的不重复元素加入到结果数组中,也可以利用JS中的对象特性来完成特定数组类型的去重。因为在JS中它是非强类型的语言,所以在我们的数组中会出现object, function, number, string, null, undefined, bool.如果是这种情况,下列列出的代码有可能不能完成。
常规方法:
遍历最初的数组,拿出一个元素,和结果数组中的每一个进行比较,如果没有重复,即将新元素插入结果数组。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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关键字:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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);