方案一:定义新数组
- 定义一个新数组,然后将原数组的元素与新数组一一比较,如果不同则放在新数组中。
<script type="text/javascript">
var arr = [1,1,3,5,6,2,6,2,2,3,4,5];
function unique(array){
var newArr = [];
for(var i=0;i<array.length;i++){
if(newArr.indexOf(array[i]) == -1){
newArr.push(array[i]);
}
}
return newArr;
}
console.log(unique(arr));
</script>
方案二:双层循环
<script type="text/javascript">
var arr = [1,1,3,5,6,2,6,2,2,3,4,5];
function unique(array){
for(var i=0;i<array.length;i++){
for(var j=i+1;j<array.length;j++){
if(array[j]===array[i]){
array.splice(j,1);
j--;
}
}
}
return array;
}
console.log(unique(arr));
</script>
方案三:排序
- 将原数组进行排序,然后将元素与相邻元素进行比较,如果相同则删掉,如果不同则保留
<script type="text/javascript">
var arr = [1,1,3,5,6,2,6,2,2,3,4,5];
function unique(array){
array.sort();
for(var i=0;i<array.length;i++){
if(array[i]===array[i+1]){
array.splice(i,1);
i--;
}
}
return array;
}
console.log(unique(arr));
</script>
方案四:对象键值对
- 利用对象属性存在的特性,如果没有该属性则存入新数组。
<script type="text/javascript">
var arr = [1,1,3,5,6,2,6,2,2,3,4,5];
function unique(array){
var obj = {};
var newArr = [];
for(var i=0;i<array.length;i++){
if(!obj[array[i]]){
obj[array[i]] = 1;
newArr.push(array[i]);
}
}
return newArr;
}
console.log(unique(arr));
</script>
方案五:es6的Set
- Set数据结构,它类似于数组,其成员的值都是唯一的。
<script type="text/javascript">
var arr = [1,1,3,5,6,2,6,2,2,3,4,5];
console.log(new Set(arr));
</script>