1、背景:
var a = [
{
name:'张三,李四',
personId:'111,222',
id:'1'
},{
name:'王五',
personId:'333',
id:'2'
}
];
var b = [
{
name:'张三',
personId:'111',
id:'1'
},{
name:'李四',
personId:'222',
id:'1'
},{
name:'王五',
personId:'333',
id:'2'
},{
name:'王六',
personId:'444',
id:'3'
}
];
b数组更新了之后,想得到一个新的a数组,将id一样的数据name字段以及personId字段合并,用‘,’拼接;
2、想到了高阶函数reduce
3、代码判断逻辑
var brr = brr.concat(arr);
var obj = {};
var b = [];
b = brr.reduce(function(item,next){
if(obj[next.id]){
for(var k=0;k<item.length;k++){
if(item[k].id == next.id){
var flag = '0';
var crr = item[k].personId.split(',');
for(var i=0;i<crr.length;i++){
if(crr[i] == next.personId){
flag = '1';
}
}
if(flag == '0'){
item[k].name= item[k].name+','+next.name;
item[k].personId= item[k].personId+','+next.personId;
}
}
}
}else{
obj[next.id] = true && item.push(next);
}
return item;
},[]);
这样既完成了要求,也实现了数据不会重复拼接。
完了,就这样记录下,高阶函数就是香!!!!!!!!!!!!