Javascript 带对象变换的数组

Javascript 带对象变换的数组,javascript,arrays,Javascript,Arrays,我有一个数组,其中包含以下对象: arr = [ {name: 'Igor', id: 1,....}, {name: 'Anton', id: 1,.... }, {name: 'Igor', id: 2,.... }, {name: 'Peter', id: 2,.... }, {name: 'Igor', id: 2,.... } ] 我需要获得新阵列,如: arrId = [ { id: 1, names: 'Igor, Anton' }, { id: 2,

我有一个数组,其中包含以下对象:

arr = [
  {name: 'Igor', id: 1,....},
  {name: 'Anton', id: 1,.... },
  {name: 'Igor', id: 2,.... },
  {name: 'Peter', id: 2,.... },
  {name: 'Igor', id: 2,.... }
]
我需要获得新阵列,如:

arrId = [
  { id: 1, names: 'Igor, Anton' },
  { id: 2, names: 'Igor, Peter' }
]
无法想出好的解决方案

var arrId=[];
var arrId = [];
var arrKey = {};
for( var counter = 0; counter < arr.length; counter++)
{ 
  var arrObj = arr[ counter ];
  if ( !arrKey[  arrObj[ "id" ] ] )
  {
    arrKey[  arrObj[ "id" ] ] = [];
  }
  arrKey[  arrObj[ "id" ] ].push( arrObj[ "name" ] );
}
for ( var id in arrKey )
{
  arrId.push( [ "id": id, names : arrKey[ id ].join( "," ) ] );
}
console.log(arrId );
var arrKey={}; 用于(变量计数器=0;计数器
var arrId=[];
var arrKey={};
用于(变量计数器=0;计数器
在本例中,我使用和

输出

[
  {
    "id": 1,
    "names": "Igor, Anton"
  },
  {
    "id": 2,
    "names": "Igor, Peter"
  }
]
在本例中,我使用和

输出

[
  {
    "id": 1,
    "names": "Igor, Anton"
  },
  {
    "id": 2,
    "names": "Igor, Peter"
  }
]
您可以使用reduce函数

arr=[
{name:'Igor',id:1},
{name:'Anton',id:1},
{name:'Igor',id:2},
{姓名:'Peter',id:2},
{name:'Igor',id:2}
]
//第一组需要id项中的字段
var结果=arr.REDUCT(功能(acc、cur){
如果(!acc.map[cur.id]){
acc.map[cur.id]={id:cur.id,名称:{};
acc.result.push(acc.map[cur.id]);
}
acc.map[cur.id].names[cur.name]=true;
返回acc;
},{map:{},结果:[]})
//从具有名称的映射对象到以逗号分隔的字符串进行附加转换
.result.map(函数(el){
返回{id:el.id,name:Object.keys(el.names).join(',')};
});
控制台日志(结果);
document.body.innerHTML=JSON.stringify(结果,null,2)您可以使用reduce函数

arr=[
{name:'Igor',id:1},
{name:'Anton',id:1},
{name:'Igor',id:2},
{姓名:'Peter',id:2},
{name:'Igor',id:2}
]
//第一组需要id项中的字段
var结果=arr.REDUCT(功能(acc、cur){
如果(!acc.map[cur.id]){
acc.map[cur.id]={id:cur.id,名称:{};
acc.result.push(acc.map[cur.id]);
}
acc.map[cur.id].names[cur.name]=true;
返回acc;
},{map:{},结果:[]})
//从具有名称的映射对象到以逗号分隔的字符串进行附加转换
.result.map(函数(el){
返回{id:el.id,name:Object.keys(el.names).join(',')};
});
控制台日志(结果);

document.body.innerHTML=JSON.stringify(结果,null,2)
你可以使用reduce你能说出这两个数组的确切区别吗?@void,按id分组的名称你能解释一下你用来生成新数组的规则吗?我假设
{id:1,名称:'Igor,Peter'}
应该是
{id:2,名称:'Igor,Peter'}
,,否则就没有意义了。你可以使用reduce你能说出这两个数组的确切区别吗?@void,按id分组的名称你能解释一下生成新数组的规则吗?我假设
{id:1,名称:'Igor,Peter'}
应该是
{id:2,名称:'Igor,Peter'
,,否则就没有意义了,尤其是我的English@IgorKim,你的英语很好。别担心:)特别是*为我的错误感到抱歉English@IgorKim,你的英语很好。别担心:)