相似问题:
1.给一个数组,去掉重复的
2.给一个数组,把重复的元素都删了,只要出现一次的
3.求出一个数组中出现次数最多的元素和次数
在此仅提供一个比较好记忆的方法,首先定义个对象,对象的键保存数组的元素,值保存出现的次数,遍历数组将数组的信息填写进对象中,如果某元素出现一次,对象的这个键名就加一。最后根据需求遍历这个对象即可;
问题1
function test(arr){
var length = arr.length;
var json = {};
for(var i = 0;i<length;i++){
if(!json[arr[i]]){
json[arr[i]] = 1;
}else{
json[arr[i]]++;
}
}
var ans = new Array();
for(var i in json){
ans.push(i);
}
return ans;
}
问题2
function test(arr){
var length = arr.length;
var json = {};
for(var i = 0;i<length;i++){
if(!json[arr[i]]){
json[arr[i]] = 1;
}else{
json[arr[i]]++;
}
}
var ans = new Array();
for(var i in json){
if(json[i] == 1){
ans.push(i);
}
}
return ans;
}
问题3
function test(arr){
var length = arr.length;
var json = {};
for(var i = 0;i<length;i++){
if(!json[arr[i]]){
json[arr[i]] = 1;
}else{
json[arr[i]]++;
}
}
var ans = new Array();
var max = 1;
var maxIndex=0;
for(var i in json){
if(json[i]>max){
max = json[i];
maxIndex = i;
}
}
return '出现最多的元素是'+maxIndex+'次数'+max;
}
------------------------------我是分割线-----------------------------------------------------------------------------
问题1数组去重用ES6 set可以直接解决,参数为要去重的数组。由于map不予许有重复的值。
var set = new Set(arr);
具体:
var arr = ['a','b','c','d','a','b'];
var set = new Set(arr);
var ans = [];
set.forEach(function(value){
ans.push(value);
})
console.log(ans);
参考阮一峰老师文章有一种跟简单的方法,一定要多看API!
function dedupe(array) {
return Array.from(new Set(array));
}
dedupe([1, 1, 2, 3]) // [1, 2, 3]
Array.from可以将set转换成数组,因此原理是首先将数组转换成set,set内部会对比添加的两个属性是否相等,若相等则不会重复添加。然后再转换成数组。