如果只是找出重复或不重复的,不用计算重复次数的情况下, 方法二,最快捷!
一. 传统处理方法是:
设置一个对象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);
来源:oschina
链接:https://my.oschina.net/u/4330317/blog/4202193