js合并数组相同key值的项 ,急
问题描述:
var arr=[ {a:3,b:4}, {a:3,b:7}, {a:5,b:2}, {a:5,b:1} ]
怎样合并为
var arr=[ {a:3,b:4,7}, {a:5,b:2,1} ]
答
<script>
var arr=[{a:3,b:4}, {a:3,b:7}, {a:5,b:2}, {a:5,b:1}];
var tempMap={};
for(var i=0;i<arr.length;i++){
var obj = arr[i];
var key = obj["a"];
if(tempMap[key]!=0&&!tempMap[key]){
tempMap[key]=obj["b"];
}else{
tempMap[key]=tempMap[key]+","+obj["b"];
}
}
var arrM=[];
for(key in tempMap){
arrM.push({a:key,b:tempMap[key+'']});
}
for(i=0;i<arrM.length;i++){
alert(arrM[i]['a']+"---"+arrM[i]['b']);//arrM是结果数组
}
</script>
答
遍历元素,判断a,操作b
答
一楼的做法感觉不太灵活且代码沉重,可参考吾如下方式进行改进:
filterRoomNames:function(roomNames){
console.log(roomNames);
var allRoom = {};
if(roomNames.length>0){
for(var i=0;i<roomNames.length;i++){
var map = roomNames[i];
for(var k in map){
//console.log(k+','+map[k]);
if(k!=null && k!='null'){
if(allRoom.hasOwnProperty(k)){ //true
allRoom[k]+= ','+map[k];
}else{
allRoom[k]=map[k];
}
}
}
}
}
console.log(allRoom);
}
解释:上方代码中为吾封装的一个过滤合并的方法,关于roomNames参数是一个数组集合,此数组集合中的json数据如下:
0: {null: "zhang3"}
1: {19-1907: "li4"}
2: {19-1908: "wang5"}
3: {null: "aa"}
4: {null: "bb"}
5: {null: "cc"}
6: {19-1904: "tt"}
7: {19-1904: "tl"}
8: {19-1904: "ty"}
9: {null: "tu"}
10: {null: "uc"}
11: {null: "kj"}
12: {19-1902: "km"}
13: {19-1901: "gc"}
14: {null: "gh"}
15: {null: "gk"}
最终合并输出如下:
{19-1907: "li4", 19-1908: "wang5", 19-1904: "tt,tl,ty", 19-1902: "km", 19-1901: "gc"}
主要关键在于map的key特性及判断key是否存在,再如此类可以此作为参考。