现需求如下,js里看有四个map,现在要第一个map位基准,把另外三个map的数据整第一个map中里面的数据格式如下
第一个mapkey    value
2010   1
2011   1第二个mapkey    value
2011   2
2012   2第三个mapkey    value
2011   3
2012   3第四个mapkey    value
2012   4
2013   4最后要的效果就是2010   1
2011   6
2012   9
2013   4一定要以第一个map位基础,把另外三个整合进去,如果key相同的 就做个相加 ,如果key不同的,增加一行显示

解决方案 »

  1.   

    一定要以第一个map位基础,把另外三个整合进去,如果key相同的 就做个相加 ,如果key不同的,增加一行显示,并且把另外三个map的key相同的做个相加
      

  2.   


    <script type="text/javascript">
    <!--
    var maps=[];
    maps.push({"2010":1 , "2011":1});
    maps.push({"2011":2 , "2012":2});
    maps.push({"2011":3 , "2012":3});
    maps.push({"2012":3 , "2014":3});var result ={};
    for(var i=0;i<maps.length;i++){
    var map= maps[i];
    for(var key in map){
    result[key] =(result[key]||0) + map[key];
    }
    }var ss="";
    for(var key in result){
    ss+= key +"   "+ result[key] +"\n";
    }
    alert(ss);
    //-->
    </script>
      

  3.   

    var map1=[
    {k:'2010',v:1},
    {k:'2011',v:1}
    ];var map2=[
    {k:'2011',v:2},
    {k:'2012',v:2}
    ];
    var map3=[
    {k:'2011',v:3},
    {k:'2012',v:3}
    ];
    var map4=[
    {k:'2012',v:4},
    {k:'2013',v:4}
    ];
    function Stat(){
    var d=[];
    this.add=function(){
    for(var i=0;i<arguments.length;i++)
     d.push.apply(d,arguments[i]);
    }
    this.result=function(){
    var o={},re=[];
    for(var i=0;i<d.length;i++){
     var v=d[i];
     o[v.k]=(o[v.k]||0)+v.v;
    }
     for(var k in o) re.push( new mi(k,o[k]));
     return re;
    }
    function mi(k,v){
      this.toString=function(){return [k,v].join(' ')  };
    }
    }
    var stat=new Stat();  
    stat.add( map1,map2,map3,map4 ); //添加MAP
    var re=stat.result(); //分析出结果,返回数组
    alert( re.join('\n') ); //
      

  4.   


    谢谢你,不过现在如果假定我不知道另外三个map里面的数据有多少,也不知道是否有重复的key的,这样怎么处理呢,我自己考虑过,好像是要考虑很多种情况,没想到好的方法
      

  5.   

    谢谢你,不过现在如果假定我不知道另外三个map里面的数据有多少,也不知道是否有重复的key的,这样怎么处理呢,我自己考虑过,好像是要考虑很多种情况,没想到好的方法