2016-07-18 8 views
2

Ich habe ein Array von Objekten, jedes Objekt haben Schlüssel und Wert. Ich möchte, wenn Objekt gleiche Schlüssel haben dann ihre Werte Komma von allen Werten des gleichen Schlüssels getrennt werden. meine HTML-Code:So erhalten Sie Objekte mit gleichen Schlüsselwerten mit Komma getrennt

<p ng-repeat="item in allOptions" class="item" id="{{item.id}}"> 
    {{item.id}} <input type="checkbox" ng-change="sync(bool, item)" ng-model="bool" > {{item}} Selected: {{bool}} 
    </p> 

und mein Controller-Code ist:

$scope.allOptions = [ 
    { 
     "id": "1", 
     "data": "one", 
    }, 
    { 
     "id": "1", 
     "data": "two", 
    }, 
    { 
     "id": "2", 
     "data": "three", 
    }, 
    ]; 

    $scope.data = [ 

    ]; 

    $scope.sync = function(bool, item){ 

    if(bool){ 
     // add item 
     $scope.data.push(item); 
    } else { 
     // remove item 
     for(var i=0 ; i < $scope.data.length; i++) { 
     if($scope.data[i] == item.id){ 
      $scope.data.splice(i,1); 
     } 
     }  
    } 
    }; 

In Datenarray i haben Objekte, wenn wir denselben Schlüssel von Objekten (gleiche ID-Wert) wählen dann will ich

{ 
      "id": "1", 
      "data": "one","two", 
     } 
+0

dies nützlich sein könnte für Sie –

+0

http://jsbin.com/weyov/45/edit?html,js,output i müde ähnlich zB: http: //jsfiddle.net/0jjquju9/8/ – Shekkar

Antwort

0

Sie können dies in folgenden Weise:

function filterData(collection) { 
      var hash = {}; 
      var result = []; 
      collection.forEach(function (item) { 
       if (hash[item.id]) { 
        hash[item.id].data += ', ' + item.data; 
       } 
       else { 
        hash[item.id] = item; 
       } 
      }); 
      for (var i in hash) { 
       result.push(hash[i]); 
      } 
      return result; 
     } 

var myData = [ 
 
    { 
 
     "id": "1", 
 
     "data": "one", 
 
    }, 
 
    { 
 
     "id": "1", 
 
     "data": "two", 
 
    }, 
 
    { 
 
     "id": "2", 
 
     "data": "three", 
 
    }, 
 
    ]; // this will be your input data 
 

 
function filterData(collection) { 
 
       var hash = {}; 
 
       var result = []; 
 
       collection.forEach(function (item) { 
 
        if (hash[item.id]) { 
 
         hash[item.id].data += ', ' + item.data; 
 
        } 
 
        else { 
 
         hash[item.id] = item; 
 
        } 
 
       }); 
 
       for (var i in hash) { 
 
        result.push(hash[i]); 
 
       } 
 
       return result; 
 
      } 
 
             
 
var filteredData = filterData(myData); //your filtered data

+0

können sie antwort was ist sammlung im obigen code ich habe nur objekt von ng-change.can editieren sie es zu meinem code – Shekkar

+0

Wie wollen sie ihre ausgabe zeigen ? –

+0

Sehen Sie, wenn dies hilfreich ist: https://jsfiddle.net/devanshumadan/1hyo00fe/ Andere kennen mich Ihre genaue Anforderung. –

0

Ich denke, einfachste Weg, um es wäre wie:

z = [ 
     { 
     "id": "1", 
     "data": "one", 
     }, 
     { 
     "id": "1", 
     "data": "two", 
     }, 
     { 
     "id": "2", 
     "data": "three", 
     }, 
    ]; 


Und sofort Code:

var result = {}; 
var groupedO = {}; 
for(a in z){ 
    var id = z[a].id; 
    var data = z[a].data; 
    if(groupedO[id] && groupedO[id].data){ 
    groupedO[id].data = groupedO[id].data + ',' + data; 
    } else { 
    groupedO[id] = {data:data}; 
    } 
} 
for(ind in groupedO) { 
    var el = groupedO[ind]; 
    if(el.data.split(',').length > 1) { // here we take only last those, where many datas grouped in 
    result.id = ind; 
    result.data = el.data; 
    } 
} 


Nach diesem result wird wie folgt aussehen:

{ id: "1", data: "one,two" } 
0

Wenn Sie jQuery verwenden, dann können Sie $.extend() Funktion in diesem Code verwenden, wenn Sie wollen nicht Bezug setzen auf das Objekt Artikel in Array Hash. Dies bedeutet, dass, wenn Sie den Hash Artikel in Array-Objekt ändern, dann Item-Objekt zu in Array myData ändern. Um dies zu vermeiden, verwenden Sie die Funktion $.extend().

var myData = [ 
 
    { 
 
     "id": "1", 
 
     "data": "one", 
 
    }, 
 
    { 
 
     "id": "1", 
 
     "data": "two", 
 
    }, 
 
    { 
 
     "id": "2", 
 
     "data": "three", 
 
    }, 
 
]; // this will be your input data 
 

 
function filterData(collection) { 
 
    var hash = {}; 
 
    var result = []; 
 
    collection.forEach(function (item) { 
 
     if (hash[item.id]) { 
 
      hash[item.id].data += ', ' + item.data; 
 
     } 
 
     else { 
 
      hash[item.id] = $.extend({}, item); 
 
     } 
 
    }); 
 
    for (var i in hash) { 
 
     result.push(hash[i]); 
 
    } 
 
    return result; 
 
} 
 
             
 
var filteredData = filterData(myData); //your filtered data

0

var myData = [{ 
 
     "id": "1", 
 
     "data": "one", 
 
    },{ 
 
     "id": "1", 
 
     "data": "two", 
 
    },{ 
 
     "id": "2", 
 
     "data": "three", 
 
    }]; 
 

 
var output = []; 
 

 
//Iterating each element of the myData 
 
myData.forEach(o => { 
 

 
    //Checking the duplicate value and updating the data field 
 
    let temp = output.find(x => { 
 
     if (x && x.id === o.id) { 
 
     x.data += ", " + o.data; 
 
     return true; 
 
    } 
 
    }); 
 
    if(!temp) 
 
    output.push(o); 
 
     
 
}); 
 
console.log(output);

Verwandte Themen