2016-08-11 2 views
0

ich hier ein wenig Hilfe brauchen, y dieses Array haben:Extract Objekte gelöscht/dupliziert Objekte dann auf andere Objekte asign

[ 
    {Code:13938, Country:699, Name:"Crocs", codeProduct:1} 
    {Code:13952, Country:699, Name:"Polo Club", codeProduct:14} 
    {Code:13952, Country:699, Name:"Polo Club", codeProduct:1} 
    {Code:13952, Country:699, Name:"Polo Club", codeProduct:3} 
    {Code:13953, Country:699, Name:"OZ", codeProduct:12} 
    .... 
] 

Und ich muss diese konvertieren:

[ 
    {Code:13938, Country:699, Name:"Crocs", codeProduct:1} 
    {Code:13952, Country:699, Name:"Polo Club", codeProduct:"14, 1, 3" } 
    {Code:13953, Country:699, Name:"Polo Club", codeProduct:12} 
] 

I Sie haben kein Problem, die doppelten Objekte zu entfernen und die Werte dieser Objekte zu erhalten.

var prodArray = []; 

function uniq_fast(a) { 
    var seen = {}; 
    var out = []; 
    var len = a.length; 
    var j = 0; 
    for(var i = 0; i < len; i++) { 
    var item = a[i].Codigo; 
    if(seen[item] !== 1) { 
      seen[item] = 1; 
      out[j++] = a[i]; 
    }else{ 
     prodArray.push({Code:item, codeProduct:a[i].TipoProductoCodigo}); 
    } 
    } 
     return out; 
    } 

dies ein neues Array von Objekten zurückgeben whitout die Werte repited und in ein neues Array prodArray die Eigenschaften von gelöschten hinzufügen.

// out return this: 
[ 
    {Code:13938, Country:699, Name:"Crocs", codeProduct:1} 
    {Code:13952, Country:699, Name:"Polo Club", codeProduct:"14, 1, 3" } 
    {Code:13953, Country:699, Name:"Polo Club", codeProduct:12} 

]

und prodArr Rückkehr dies:

[ 
    {Code:13952, codeProduct:1} 
    {Code:13952, codeProduct:3} 
] 

Aber wie richte ich die Eigenschaften in prodArray in das neue Array, das die keine doppelten Objekte hält ?.

hoffte, ich habe klar gewesen

+0

scheint ziemlich inkonsistent ... Sie würden eine Eigenschaft haben, die entweder eine Stringliste oder eine einzelne Zahl enthalten. –

+0

Soooo du hast die Duplikate nach prodArray verschoben und möchtest sie wieder hinzufügen? –

+1

Ich verstehe Ihre letzte Frage nicht –

Antwort

1

Sie könnten eine Hash-Tabelle als Referenz auf die Code verwenden.

var data = [{ Code: 13938, Country: 699, Name: "Crocs", codeProduct: 1 }, { Code: 13952, Country: 699, Name: "Polo Club", codeProduct: 14 }, { Code: 13952, Country: 699, Name: "Polo Club", codeProduct: 1 }, { Code: 13952, Country: 699, Name: "Polo Club", codeProduct: 3 }, { Code: 13953, Country: 699, Name: "OZ", codeProduct: 12 }], 
 
    grouped = []; 
 

 
data.forEach(function (a) { 
 
    if (!this[a.Code]) { 
 
     this[a.Code] = { Code: a.Code, Country: a.Country, Name: a.Name, codeProduct: a.codeProduct }; 
 
     grouped.push(this[a.Code]); 
 
     return; 
 
    } 
 
    this[a.Code].codeProduct += ', ' + a.codeProduct; 
 
}, Object.create(null)); 
 
console.log(grouped);

+0

Vielen Dank Nina !. – Mauro

1

Ich werde mein Bestes versuchen, dies zu beantworten, ohne genau zu wissen, was Sie zu tun versuchen ...

So können Sie Ihre doppelten Werte in prodArray haben, groß. Jetzt wollen Sie, dass sie in das Array platziert werden, von dem Sie sie gerade entfernt haben? Sicher. Um ein Element am Ende eines Arrays anzuhängen, verwenden Sie die Methode push.

Ich nehme an, die Sache, die Sie gefangen sind, ist das Ergreifen der fehlenden JSON-Eigenschaften, Country und Name, und Hinzufügen von ihnen zurück zu den Elementen in prodArray. Aber da wir wissen, dass Code das gleiche ist, können wir das verwenden, um die "fehlenden" Werte zu finden. Also hier ist, wie ich es tun würde, vorausgesetzt, a ist Ihre ursprüngliche Array:

for (var i in prodArray) { 

    // find the duplicate in the orginal array 
    for (var j in a) { 

     if (a[j].Code == prodArray[i].Code) { 

      // found it, now append into a 
      a.push(a[j]); 
      break; 

     } 

    } 

} 

Bin ich in der Nähe?

+0

Vielen Dank Danny für Ihre Antwort, tut mir leid, wenn ich nicht klar sein werde. – Mauro