2018年0112日笔记: 在数组里判断是否重复出现, 及重复次数等问题的三种解决方案

泪湿孤枕 提交于 2021-02-10 17:48:16

如果只是找出重复或不重复的,不用计算重复次数的情况下, 方法二,最快捷!

 

一. 传统处理方法是:

设置一个对象obj,并把数组中的每个元素,作为obj的属性; 统计属性的值(出现一次值加1);

大于1的,就是重复的元素.等于1就是没有重复的元素,最后把重复或不重复的元素放入新的数组中. 

也可以用此方法来统计重复次数最多的元素,及次数;

1.题目:查找数组中重复出现过的元素

var arrx =[1, 2, 4, 4, 3, 3, 1, 5, 3];
function duplicates(arr) {
var obj = {};
var res = [];
for(i in arr){
if(obj[arr[i]]){
obj[arr[i]] +=1;
} else{
obj[arr[i]] =1;
}
if(obj[arr[i]]>1 && res.indexOf(arr[i])==-1){ //obj的键大于1(说明重复出现), 并且 res数组里没有出现过,防止重复放入res;
res.push(arr[i]);

}
}

console.log(res);
}
duplicates(arrx);


2.上题数组中统计重复最多的元素和重复次数:

function duplicates(arr) {
var obj = {};
arr.forEach(function(item){
if(obj[item]){
obj[item] += 1;
}else {
obj[item] =1;
}

})

var maxkey = "";
var maxvalue = 0;
for(p in obj){ // 注意点: js中一个对象中的键值对,也是可以直接循环的
if(obj[p]>maxvalue){
maxkey = p;
maxvalue = obj[p];
}
}

console.log("重复最多的元素是:"+maxkey+","+"总共重复了"+maxvalue+"次");

}






二, 运用数组的indexOf()和 lastIndexOf()方法取下标值,再进行值判断,
如果元素没有重复,那这个元素的
indexOf和lastIndexOf的值是相同的.重复出现则值不相等.
function duplicates(arr) {
var res = [];
for(i in arr){
if(arr.indexOf(arr[i]) != arr.lastIndexOf(arr[i]) && res.indexOf(arr[i])== -1){
res.push(arr[i]);
}
}

console.log(res);
}






三, 运用标志方法, 改变标志的布尔值来判断
题目:数组["apple","orange","apple","orange","pear","orange"], 去重
var arr = ["apple","orange","apple","orange","pear","orange"];
var newarr = [];
for(var i=0;i<arr.length;i++){
var b = true;
for(var j=0;j<newarr.length;j++){
if(newarr[j]==arr[i]){
b = false;
continue;
}
}
if(b){
newarr.push(arr[i]);
}

}
console.log(newarr);
 













标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!