var A=["尺寸: 4 GB", "颜色: 蓝黑", "尺寸: 16 GB", "颜色: 黑红", "尺寸: 8 GB", "颜色: 白黑", "尺寸: 32 GB"] ;var B=["尺寸:4GB,16GB,8GB,32GB","颜色:蓝黑,黑红,白黑"]
根据A数组 得到B数组,谁有比较好的方法js数组Array

解决方案 »

  1.   

    var A=["尺寸: 4 GB", "颜色: 蓝黑", "尺寸: 16 GB", "颜色: 黑红", "尺寸: 8 GB", "颜色: 白黑", "尺寸: 32 GB"];var B= ["尺寸:4GB,16GB,8GB,32GB","颜色:蓝黑,黑红,白黑"];var C = [["尺寸:"],["颜色:"]];
    for( var i=0; i<A.length; i++ ){
    var u = A[i],
    ar = u.split(':');
    ar[0]+':' === C[0][0] && C[0].push(trim(ar[1])),
    ar[0]+':' === C[1][0] && C[1].push((ar[1]));
    }C[0] = C[0].join(',')
    C[1] = C[1].join(',')
    console.log(C)
    function trim(s){
    return s.replace(/(^ +| +$)/ig,'')
    }
      

  2.   

    不建议写死参数:<script type="text/javascript">
        var A=["尺寸: 4 GB", "颜色: 蓝黑", "尺寸: 16 GB", "颜色: 黑红", "尺寸: 8 GB", "颜色: 白黑", "尺寸: 32 GB"];
        //var A=["尺寸: 4 GB", "颜色: 蓝黑", "尺寸: 16 GB", "颜色: 黑红", "尺寸: 8 GB", "颜色: 白黑", "尺寸: 32 GB","其他: 神马东西"];
        var temp={},B=[];
        for(var i= A.length-1;i>=0;i--){
            var arr=A[i].split(": ");
            if(temp[arr[0]]){
                temp[arr[0]]+=","+arr[1];
            }else{
                temp[arr[0]]=arr[1];
            }
        }
        for(var k in temp){
            B.push(k+":"+temp[k]);
        }
        console.log(B);
        //var B= ["尺寸:4GB,16GB,8GB,32GB","颜色:蓝黑,黑红,白黑"];
    </script>
      

  3.   


    好优雅的代码,没看回复自己写了个,是否太笨重了:var a=["尺寸: 4 GB", "颜色: 蓝黑", "尺寸: 16 GB", "颜色: 黑红", "尺寸: 8 GB", "颜色: 白黑", "尺寸: 32 GB"] ;
                var c=[];
                a.forEach(function(item){
                    insertIntoC(item,c);
                });
                alert(c);            function insertIntoC(value, target){
                    var trim=value.replace(' ','');
                    var splits=trim.split(':');
                    var index=checkExistKey(splits[0],c);
                    if(index !== -1){
                        c[index]=c[index]+','+splits[1];
                    }
                    else{
                       c[c.length]=trim;
                    }
                };            function checkExistKey(key, array){
                    var index=-1;
                    array.forEach(function(item,ind){
                        if(item.indexOf(key) === 0){
                            index = ind;
                        }
                    })                return index;
                }
      

  4.   


    function E( x ){console.log( x );};
    var a=["尺寸: 4 GB", "颜色: 蓝黑", "尺寸: 16 GB", "颜色: 黑红", "尺寸: 8 GB", "颜色: 白黑", "尺寸: 32 GB"];
    function select( al ){
    var _a = [],
    _b = [],
    _tmp;
    for(var i = 0 , len = al.length; i < len; i++){
    _tmp = al[ i ].replace( /\n/ , "" ).split(":")[ 1 ];
    if( i % 2 ){
    _b.push( _tmp );
    } else {
    _a.push( _tmp );
    };
    };
    return ( [ "尺寸:" + _a.join(",") , "颜色:" + _b.join(",") ] );
    };
    E( select( a ) );
      

  5.   

        var A=["尺寸: 4 GB", "颜色: 蓝黑", "尺寸: 16 GB", "颜色: 黑红", "尺寸: 8 GB", "颜色: 白黑", "尺寸: 32 GB","材料:金属"];
        var t = [];final = [],keys={},k=0;
        for(var i=0,j=A.length;i<j;i++){
          t =  A[i].split(/\s*:\s*/);
          if(typeof keys[t[0]] == "undefined"){
             final[k] = t[0]+":"+t[1];
             keys[t[0]] = k++;
          }
          else final[keys[t[0]]] += ','+t[1]
        }
        console.log(final)
      

  6.   


    個人覺得這種方式很好,只要封裝一下組成函數,那麼只要傳一個參數就行了,能一本萬利.
    不過建議var arr=A[i].split(": ");還是截取下兩邊的空格好點
      

  7.   

    var A=["尺寸: 4 GB", "颜色: 蓝黑", "尺寸: 16 GB", "颜色: 黑红", "尺寸: 8 GB", "颜色: 白黑", "尺寸: 32 GB"];
    function finArr (arr,str) {//判断arr数组中时候有str字符串
    for (var i = 0; i < arr.length; i++) {
    if(arr[i]==str){
    return true;
    }
    };
    return false;
    }
    var c=[],tempArr=[],result=[];
    for (var i = 0; i < A.length; i++) {
    c[i]=A[i].split(':');//用c[]接受A数组切完的数组
    }
    for (var i = 0; i < c.length; i++) {
    if (!finArr(tempArr,c[i][0])) {//用tempArr判断需要循环的属性
    tempArr.push(c[i][0]);
    var tempStr=c[i][0];//用来存临时的属性值
    for (var j = i; j < c.length; j++) {
    if (c[j][0]==c[i][0]) {
    tempStr+=c[j][1];
    };
    };
    result.push(temp);
    };
    };
      

  8.   


    var A=["尺寸: 4 GB", "颜色: 蓝黑", "尺寸: 16 GB", "颜色: 黑红", "尺寸: 8 GB", "颜色: 白黑", "尺寸: 32 GB"] ;
    var save={};
    for(var i=0,len=A.length;i<len;i++){
    var item=A[i].split(':');
    if(save[item[0]])
    save[item[0]].push(item[1].replace(/ /g,''));
    else 
    save[item[0]]=[item[1].replace(/ /g,'')];
    }
    var B=[]; 
    for(var key in save) {
    if(save.hasOwnProperty(key))
    B.push(key+':'+save[key].join(','));
    }
    console.log(B);