Javascript 从数组中删除重复项,转换为对象数组并添加重复计数属性

Javascript 从数组中删除重复项,转换为对象数组并添加重复计数属性,javascript,arrays,Javascript,Arrays,我有一个字符串数组: var array = ['bob', 'charlie', 'bob', 'bob']; 我想从中删除重复项,然后我想将其转换为对象数组,同时添加重复计数属性 这就是我想要实现的目标: var filteredData = [{ name: 'bob', count: 3}, { name: 'charlie', count: 1}]; 如何执行此操作?ECMAScript 5使用函数的解决方案: var arr=['bob','charlie','bob','b

我有一个字符串数组:

var array = ['bob', 'charlie', 'bob', 'bob']; 
我想从中删除重复项,然后我想将其转换为对象数组,同时添加重复计数属性

这就是我想要实现的目标:

var filteredData = [{ name: 'bob', count: 3}, { name: 'charlie', count: 1}];
如何执行此操作?

ECMAScript 5使用函数的解决方案:

var arr=['bob','charlie','bob','bob'],
计数=arr.reduce(功能(r,s){
(!r[s])?r[s]={name:s,count:1}:r[s]['count']+=1;
返回r;
}, {}),
结果=Object.keys(counts).map(函数(k){返回计数[k];});
控制台日志(结果)与一起使用:

const数组=['bob','charlie','bob','bob'];
const result=[…array.reduce((映射,名称)=>{
const current=map.get(name)|{name,count:0};
current.count++;
返回映射集(名称,当前);
},新映射())。值()];

控制台日志(结果)以下是一些简单的用法:

const data=['bob','charlie','bob','bob']
const result=data.reduce(函数(上、当前){
const index=prev.findIndex(el=>el.name==curr)
如果(索引!=-1){
上一个[索引]。计数+=1
}否则{
上一次推送({name:curr,count:1})
}
返回上一个
}, [])

console.log(result)
可能的副本不是完全的副本,但答案将是答案的稍微修改版本