wwdd12391
wwdd12391
2016-03-22 05:07
采纳率: 40.9%
浏览 7.2k

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} ]

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • danielinbiti
    danielinbiti 2016-03-22 05:42
    已采纳
     <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>
    
    点赞 评论
  • enpterexpress
    把分全给哥 2016-03-22 05:34

    遍历元素,判断a,操作b

    点赞 评论
  • ruchiruzui2012
    ruchiruzui2012 2018-10-25 05:47

    一楼的做法感觉不太灵活且代码沉重,可参考吾如下方式进行改进:

     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是否存在,再如此类可以此作为参考。

    点赞 评论

相关推荐