数组去重

相似问题:

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内部会对比添加的两个属性是否相等,若相等则不会重复添加。然后再转换成数组。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值