已知var json = [
{
lx: '水果',
dw: 'a',
mc: '苹果'
},
{
lx: '蔬菜',
dw: 'c',
mc: '豌豆'
},
{
lx: '水果',
dw: 'b',
mc: '香蕉'
},
{
lx: '水果',
dw: 'a',
mc: '西瓜'
}
];
需要得到var jsonEND = [
{
lx: '水果',
dw: ['a', 'b'],
mc: [['苹果', '西瓜'], ['香蕉']]
},
{
lx: '蔬菜',
dw: ['c'],
mc: [['豌豆']]
}
];有点类似sql中的 group by lx, dw求助高手。

解决方案 »

  1.   

    测试无误,逻辑略微复杂
    var result=new Array();//这个数组保存结果
    for(var i=0;i<json.length;i++)
    {
      var aobj=json[i];
      var lxMask=false;
      for(var j=0;j<result.length;j++)
      {
        var aresult=result[j];
        if(aobj.lx===aresult.lx)
        {
          lxMask=true;
          var dwMask=false;
          for(var k=0;k<aresult.dw.length;k++)
          {
             if(aobj.dw===aresult.dw[k])
             {
               aresult.mc[k].push(aobj.mc);
               dwMask=true;
               break;
             }
          }
          if(!dwMask)
          {
             aresult.dw.push(aobj.dw);
             aresult.mc.push([aobj.mc]);
          }
        }
      }
      if(!lxMask)
      {
         var newobj={lx:aobj.lx,dw:[aobj.dw],mc:[[aobj.mc]]};
         result.push(newobj);
       }
    }
      

  2.   

    a:for(var i = 0; i<json.length; i++)
    {
    if(i==0)
    {
    jsonEND[0] = json[0];
    jsonEND[0].dw = [jsonEND[0].dw];
    jsonEND[0].mc = [jsonEND[0].mc];
    }
    else
    {
    var len = jsonEND.length;
    b:for(var k=0; k<len; k++)
    {
    if(jsonEND[k].lx == json[i].lx)
    {
    if(jsonEND[k].dw.indexOf(json[i].dw) < 0)
    {
    jsonEND[k].dw.push(json[i].dw)
    }
    if(jsonEND[k].mc.indexOf(json[i].mc) < 0)
    {
    jsonEND[k].mc.push(json[i].mc)
    }
    break b;
    }
    else
    {
    jsonEND.push(json[i]);
    var _k = k+1;
    jsonEND[_k].dw = [jsonEND[_k].dw];
    jsonEND[_k].mc = [jsonEND[_k].mc];
    }
    }
    }
    }
    没怎么测试,你看看
      

  3.   

    IE需要加个转换toString()下
    if(jsonEND[k].dw.toString().indexOf(json[i].dw.toString()) < 0)
    {
    jsonEND[k].dw.push(json[i].dw)
    }
    if(jsonEND[k].mc.toString().indexOf(json[i].mc.toString()) < 0)
    {
    jsonEND[k].mc.push(json[i].mc)
    }
      

  4.   

    唉,我写那段代码你都没测试下么?
    只是我变量名用的result而不是jsonEND罢了,
    但代码是正确的,
    本来因为这种问了问题又不理会别人回答的态度让人不太高兴,我不想说,反正是你的问题不是我的,
    但好歹也是费了我一点心思,也不想浪费,
    你测试下吧
    alert(result[0].mc[0][1])---西瓜
    alert(result[0].dw)---a
    alert(result[0].mc[1][0])---香蕉
      

  5.   

    用chrome或者firefox查看以下链接
    http://jsbin.com/oxihot/1/edit