现需求如下,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不同的,增加一行显示
第一个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不同的,增加一行显示
<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>
{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') ); //
谢谢你,不过现在如果假定我不知道另外三个map里面的数据有多少,也不知道是否有重复的key的,这样怎么处理呢,我自己考虑过,好像是要考虑很多种情况,没想到好的方法