数组去重

来源:互联网 发布:linux有什么认证 编辑:程序博客网 时间:2024/05/21 06:41

相似问题:

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


原创粉丝点击