希望最后能得到去重的数组,和每一个元素出现的次数
纯手写
let hash = {};
let result = [];
for (let i = 0; i < arr.length; i++) {
ele = arr[i];
if (!hash[ele]) {
result.push(ele);
hash[ele] = 1;
} else {
hash[ele]++;
}
}
// handled arr
console.dir(result);
// appear times of each element
for (let i in hash) {
console.log(i + ' has appeared ' + hash[i] + ' times');
}
const arr = [1,1,1,2,3,4,4,4,2,3,5,4];
const map = arr.reduce((m, x) => m.set(x, (m.get(x) || 0) + 1), new Map())
// 去重数组
const newArr = Array.from(map.keys())
// 所有次数
Array.from(map.values())
//某个次数
map.get(newArr[0])
ES6方法去重
const arr = [1,1,1,2,3,4,4,4,2,3,5,4];
var result = Array.from(new Set(arr));
console.log(result);
重复个数
const arr = [1,1,1,2,3,4,4,4,2,3,5,4];
function gets(arr){
var obj = {},
l = arr.length,
yuansu = [],
cishu = [];
for(var i = 0;i<l;i++){
!obj[arr[i]] ? obj[arr[i]] = 1 : obj[arr[i]] += 1;
}
for(i in obj){
yuansu.push(i);
cishu.push(obj[i]);
console.log(yuansu[i-1]+'出现的次数'+cishu[i-1]);
}
}
gets(arr);
function uniqueCount(arr){
var result = [],
count = {};
for(var i = 0, len = arr.length; i < len; i++){
var temp = arr[i];
if (!count[temp]) {
result.push(temp);
count[temp] = 1;
}else {
count[temp]++;
}
}
return count;
}
key就是去重后的数组,value就是每一个重复的次数
实际上上面的答案在元素类型不一样时会有问题的。
function dupCount(arr){
var obj = [];
arr.filter(function(cur,index,ar){
return arr.indexOf(cur)!=arr.lastIndexOf(cur)&&arr.indexOf(cur)!=-1
}).forEach(function(cur,index,arr){
var key = Object.prototype.toString.call(cur)+cur
if(!obj[key]){
obj[key]=1
}else{
obj[key]++
}
})
return obj
}
var arr = [1,1,5,5,4,3,'1','1']
console.log(dupCount(arr))
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
更新:

如果期望排序根据数值el来的话使用这个:
把count改成el即可!