本帖最后由 html5cloud 于 2013-02-27 01:03:21 编辑

解决方案 »

  1.   

    <script type="text/javascript">
    var x=[];
    var y=[];
    var z=[];
    arr = [ {a:1 , b:1 , c:1}, {a:2 , b:1 , c:2}, {a:3 , b:3 , c:3},
               {a:1 , b:1 , c:4}, {a:5 , b:5 , c:5}]
    for(var i in arr){
    for(var j in arr[i]){
    if(j=="a"){
    x.push(arr[i][j]);
    }else if(j=="b"){
    y.push(arr[i][j]);
    }else{
    z.push(arr[i][j]);
    }
    }
    }
    var f={};
    f.a=x.join(",");
    f.b=y.join(",");
    f.c=z.join(",");
    for(var i in f){
    alert(i+":"+f[i]);
    }
    </script>
    最笨的方法
      

  2.   


    var arr = [ 
            { a : 1 , b : 1 , c : 1}, 
            { a : 2 , b : 1 , c : 2}, 
            { a : 3 , b : 3 , c : 3},
            { a : 1 , b : 1 , c : 4}, 
            { a : 5 , b : 5 , c : 5}
          ] , result = {} , temp = {};    for(var i = 0 ; i < arr.length ; ++i){
            for(var j in arr[i]){
                if(!temp[j]){
                    temp[j] = {};
                    result[j] = [];
                }                
                if(!temp[j][arr[i][j]]){
                    result[j].push(arr[i][j]);
                }                
                temp[j][arr[i][j]] = arr[i][j];
            }
        }
        console.log(result); 
      

  3.   


    var unionObjectArray = function(arr, atr){
        var r = [], t = {}, x, y, z;
        for(var i = 0, il = arr.length; i < il; i++){
            t[arr[i][atr]] = t[arr[i][atr]] || [];
            t[arr[i][atr]].push(i)
        }
        for(var p in t)if(t.hasOwnProperty(p)){
            x = {};
            for(var i = 0, il = t[p].length; i < il; i++){
                z = arr[t[p][i]];
                for(var q in z)if(z.hasOwnProperty(q)){
                    x[q] = null;
                }
            }
            for(var q in x)if(x.hasOwnProperty(q)){
                y = {};
                for(var i = 0, il = t[p].length; i < il; i++){
                    z = arr[t[p][i]];
                    if(z[q] != null) y[z[q]] = 1;
                }
                for(var s in y)if(y.hasOwnProperty(s)){
                    if(x[q] == null)x[q] = s;
                    else{
                        x[q] = [x[q]];
                        x[q].push(s)
                    }
                }
            }
            r.push(x)
        }
        t = x = y = z = null;
        return r;
    };
    //测试:
    var printObjectArray = function(arr){
        var buf = [], b;
        for(var i = 0, il = arr.length; i < il; i++){
            buf.push("{");
            b = false;
            for(var p in arr[i])if(arr[i].hasOwnProperty(p)){
                if(b)buf.push(',');
                b = true;
                buf.push(p + ":" + (arr[i][p] instanceof Array ? "[" + arr[i][p] + "]" : arr[i][p]))
            }
            buf.push("}<br>")
        }
        document.write(buf.join(''));
    },
    arr = [ 
        {a:1 , b:1 , c:1}, 
        {a:2 , b:1 , c:2}, 
        {a:3 , b:3 , c:3},
        {a:1 , b:1 , c:4}, 
        {a:3 , b:4 , c:5}
    ], atrs = ['a', 'b', 'c', 'd'];document.write("原对象数组:<br>");
    printObjectArray(arr);
    document.write("<br>");for(var i = 0, il = atrs.length; i < il; i++){
        document.write("合并属性" + atrs[i] + "后:<br>");
        printObjectArray(unionObjectArray(arr, atrs[i]));
        document.write("<br>");
    }