Javascript 如果在对象中发现重复的名称,如何迭代对象数组以添加计数器值

Javascript 如果在对象中发现重复的名称,如何迭代对象数组以添加计数器值,javascript,underscore.js,Javascript,Underscore.js,我有一个对象数组,希望遍历其中的对象。因此,如果发现重复的名称条目,我必须添加计数器值,并将其合并。对象的最终数组必须具有唯一的条目 对象A= [ {name: 'Voice', counter: 1}, {name: 'tele', counter: 1}, {name: 'equip', counter: 1}, {name: 'equip', counter: 2}, {name: 'Voice', counter: 1} ] 结果应该是:- ObjectB= [

我有一个对象数组,希望遍历其中的对象。因此,如果发现重复的名称条目,我必须添加计数器值,并将其合并。对象的最终数组必须具有唯一的条目

对象A=

[
  {name: 'Voice', counter: 1},
  {name: 'tele', counter: 1},
  {name: 'equip', counter: 1},
  {name: 'equip', counter: 2},
  {name: 'Voice', counter: 1}
]
结果应该是:-

ObjectB=

[
  {name: 'Voice', counter: 2},
  {name: 'tele', counter: 1},
  {name: 'equip', counter: 3}
]
您可以将与以下逻辑结合使用

演示
let data=[{name:'Voice',counter:1},
{name:'tele',计数器:1},
{名称:'装备',计数器:1},
{名称:'装备',计数器:2},
{姓名:'语音',计数器:1}]
var结果=[];
数据减少(函数(res,value){
如果(!res[value.name]){
res[value.name]={
name:value.name,
柜台:0
};
result.push(res[value.name])
}
res[value.name].counter+=value.counter
返回res;
}, {});
console.log(result)
您可以取一个值,对所有
计数器的值进行求和,并按
名称
分组

var data=[{name:'Voice',counter:1},{name:'tele',counter:1},{name:'equipment',counter:1},{name:'equipment',counter:2},{name:'Voice',counter:1}],
unique=Array.from(
data.reduce((m,{name,counter})=>m.set(name,(m.get(name)| | 0)+counter),newmap),
([name,counter])=>({name,counter})
);
console.log(唯一)
。作为控制台包装{max height:100%!important;top:0;}
尝试以下方法:

const arr=[
{name:'Voice',计数器:1},
{name:'tele',计数器:1},
{名称:'装备',计数器:1},
{名称:'装备',计数器:2},
{姓名:'语音',计数器:1}
];
const resultObj=arr.reduce((附件,项目)=>{
acc[item.name]=(acc[item.name]| | 0)+item.counter;
返回acc;
}, {})
const resultar=Object.entries(resultObj.map)(entry=>({
名称:条目[0],
柜台:条目[1]
}))

document.body.innerHTML=`${JSON.stringify(resultar,null,2)}`
您可以使用reduce对列表中具有相同
名称的对象进行分组。稍后,如果发现具有相同名称的对象,则会增加
计数器
,否则会将该对象推入数组

var arr=[{name:'Voice',计数器:1},
{name:'tele',计数器:1},
{名称:'装备',计数器:1},
{名称:'装备',计数器:2},
{姓名:'语音',计数器:1}];
var newArray=arr.reduce((附件,项目)=>{
var element=acc.find(obj=>obj['name']==item['name']);
if(元素){
元素['counter']=元素['counter']+1;
}否则{
acc.push(项目);
}
返回acc;
}, []);
log(newArray)您可以使用lodash reduce功能

let data=[{name:'Voice',counter:1},
{name:'tele',计数器:1},
{名称:'装备',计数器:1},
{名称:'装备',计数器:2},
{姓名:'语音',计数器:1}];
数据=\减少(数据,(arr,n)=>{
const index=u.findIndex(arr,{name:n.name});
如果(索引!=-1){
arr[index]。计数器+=1;
}否则{
arr.push(n);
}
返回arr;
},[]);
控制台日志(数据)

请添加您的代码。也请看这里: