方式1:
<script>
function getsome(){
let result=[];
let a=[1,2,3,2,3,4,2,1,5];
for(let i=0;i<a.length;i++){
for(let j=i+1;j<a.length;j++){
if(a[i]==a[j]){
let num=a.splice(j,1);
result.push(num);
j--;
}
}
}
console.log(a);
return result;
}
var jieguo=getsome();
console.log("重复元素组成的数组"+jieguo+"\n"+"该数组的长度"+jieguo.length);
</script>
运行结果:
[1, 2, 3, 4, 5]
重复元素组成的数组1,2,2,3
该数组的长度4
补充:该方法最终得到了里面重复的元素组成的数组,并且去除掉了原数组中的重复的元素,但是它的时间复杂度o(n^2)。
方式二:
<script>
function getResult(){
let a=[3,2,4,2,1,45,4,6];
a.sort(function(num1,num2){
return num1-num2;
});
//console.log(a);sort方法会改变原数组顺序
let result=[a[0]];
// console.log(result);
for(let i=1;i<a.length;i++){
if(a[i]!==result[result.length-1]){
result.push(a[i]);
}
}
return result;
}
var res=getResult();
console.log(res);
</script>
运行结果:
[1, 2, 3, 4, 6, 45]
总结:该方法时间复杂度方面较第一次来说,明显减少,但是还是存在很大的局限性。
首先它是先对数组进行排序,然后申请一个空间用来存放排好序的第一个元素值,然后循环遍历剩下的值,当遇到该数组里面没有的便添加进来。但是呢,它改变了数组原来的顺序。
方法三:
<script>
function getResult(){
let a=[2,2,3,4,5,6,2,3];
let result=[];
for(let i=0;i<a.length;i++){
if(result.indexOf(a[i])===-1){
result.push(a[i]);
}
}
return result;
}
var res=getResult();
console.log(res);
</script>
运行结果:
[2, 3, 4, 5, 6]
总结:该方法相比上一个就好很多了,它并没有改变数组的顺序。它先是顶一个一个空的数组,然后遍历原来的数组a,只要是result数组里面没有的就都添加到这个result数组里面,最终得到的result数组就是去重之后的数组。(用到了数组的indexOf()方法)