面试官问你2:数组去重有什么方法
Posted 咖啡壶子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试官问你2:数组去重有什么方法相关的知识,希望对你有一定的参考价值。
数组去重的九种方法(难度:★★★)
1.利用set去重(这种方法无法去掉“{}”空对象,)
<script>
var arry = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
// var set=[...new Set(arry)];
// Array.form会将set对象转化成数组
arry1=Array.from(new Set(arry))
console.log(arry1);// [1, 'true', true, 15, false, undefined, null, NaN, 'NaN', 0, 'a', {…}, {…}]
2. for循环嵌套,splice去重(NaN和{}没有去重,两个null直接消失了)
<script>
var arry=[1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
// [1, 'true', 15, false, undefined, NaN, NaN, 'NaN', 'a', {…}, {…}]
for(var i=0;i<arry.length;i++){
for(var j=i+1;j<arry.length;j++){
if(arry[i]==arry[j]){
arry.splice(j,1);
j--;
// break
}
}
}
console.log(arry);
3. 利用indexof去重()
<script>
var arry = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
var arr = []
if (!Array.isArray(arry)) {
console.log("数据类型错误")
} else {
for (var i = 0; i < arr.length; i++) {
if (arry.indexOf(arr[i]) == -1) {
arr.push(arry[i])
}
}
}
console.log(arr);
</script>
4. 利用includes()去重
<script>
var arry = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
if(!Array.isArray(arry)) console.log('type error')
var arry1=[]
for(var i=0;i<arry.length;i++){
if(!arry1.includes(arry[i])){
arry1.push(arry[i])
}
}
console.log(arry1);
</script>
5. 利用递归去重
<script>
var arry = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
var arry1 = JSON.parse(JSON.stringify(arry))
console.log(arry1);
arry1.sort()
function unique(index) {
if (index >= 1) {
if (arry1[index] === arry1[index - 1]) {
arry1.splice(index,1)
}
unique(index-1)
}
return arry1
}
console.log(unique(arry1.length-1));
</script>
6. 利用sort方法
<script>
var arry = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
if (!Array.isArray(arry)) {
console.log('type error');
}
arry = arry.sort()
var arry1 = [arry[0]]
for (var i = 1; i < arry.length-1; i++) {
if (arry[i] !== arry[i -1]) {
arry1.push(arry[i])
}
}
console.log(arry1);//NaN、{}没有去重
// [0, 1, 15, NaN, NaN, 'NaN', {…}, {…}, 'a', false, null, 'true', true, undefined]
</script>
7. hasOwnProperty去重
<script>
var arry = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
var obj = {}
arry1=arry.filter(function (item, index, array) {
return obj.hasOwnProperty(typeof item + item)?false:(obj[typeof item+item]=true)
})
console.log(arry1);//全部去重
// [1, 'true', true, 15, false, undefined, null, NaN, 'NaN', 0, 'a', {…}]
</script>
8. 利用filter去重
<script>
var arry = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
arry1=arry.filter(function(item,index,arry){
return arry.indexOf(item,0)===index
})
console.log(arry1);//{}没有去重
// [1, 'true', true, 15, false, undefined, null, 'NaN', 0, 'a', {…}, {…}]
</script>
9. 利用map去重
<script>
var arry = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
var map=new Map()
var arry1=[]
for(var i=0;i<arry.length;i++){
if(map.has(arry[i])){
map.set(arry[i],true)
}else{
map.set(arry[i],false)
arry1.push(arry[i])
}
}
console.log(arry1);//{}没有去重
// [1, 'true', true, 15, false, undefined, null, NaN, 'NaN', 0, 'a', {…}, {…}]
</script>
以上是关于面试官问你2:数组去重有什么方法的主要内容,如果未能解决你的问题,请参考以下文章
面试官问你:为什么选择spring作为Java框架,你该怎么回答?