2017-08-25 3 views
-2

Haben Sie ein Array mit Objekten.Split-Array in Stücke basierend auf der Reihenfolge der Eigenschaft

Es sieht wie folgt aus:

[{id:2},{id:3},{id:4},{id:9},{id:10},{id:11}] 

Als Folge ich dies wollen:

[{id:2,id:4},{id:9,id:11}] 

haben keine Ahnung, wie Mittelwerte löschen (Sinus sie aufeinander folgend sind), und wie sie trennen in Gruppen, wenn wir nicht haben id: 5,6,7,8, was bedeutet, dass es eine Lücke in der Sequenz gibt.

+3

Was ist die Logik hinter dem gewünschten Ergebnis? – codtex

+0

Ich schreibe Ergebnis, das ich will. Löschen Sie die mittleren Werte und trennen Sie diese auf 2 Objekte –

+2

Dies macht nicht einmal Sinn: als Ergebnis haben Sie zwei Objekte mit zweimal den gleichen Schlüssel. –

Antwort

1

Wenn ich richtig verstanden habe, möchten Sie die Eingabe in Teile teilen, wo jedes Teil Objekte hat, deren id Werte aufeinander folgen, und dann nur das erste und letzte Objekt dieser Sequenz in jeden Teil aufnehmen.

Sie tun können, wie folgt:

var input = [{id:2},{id:3},{id:4},{id:9},{id:10},{id:11},{id:15},{id:16},{id:17},]; 
 

 
var result = input.reduce ((acc, obj, i) => { 
 
    if (i && input[i-1].id === obj.id - 1) { 
 
     acc.last[1] = obj; 
 
    } else { 
 
     acc.push(acc.last = [obj]); 
 
    } 
 
    return acc; 
 
}, []); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

Eingabe kann diese sein var input = [{id: 2}, {id: 3}, {id: 4}, {id: 9}, {id: 10}, { ID: 11}, {ID: 15}, {ID: 16}, {ID: 17},]; Ich möchte es gruppieren. –

+0

Das ist, was diese Antwort tut. Hast du es getestet? Ich habe diese Daten einfach in das Snippet geschrieben. Starte es. – trincot

+0

warten Sie bitte, wird jetzt Test –

0


Sie können das Array durchlaufen und neue Array-Objekt hinzufügen, wenn es Ihr Zustand entsprechen.

var arrNew = []; 
for(int i=0;i<arr.length;i++){ 
    var obj = arr[i]; 
    if(obj.id ==2 || obj.id==100){ 
     conitnue; 
    } 
    arrNew.push(obj); 
} 
0

können Sie gruppieren sie von den id und nehmen verschiedene Schlüssel für links eine richtigen Eigenschaften.

var array = [{ id: 2 }, { id: 3 }, { id: 4 }, { id: 9 }, { id: 10 }, { id: 11 }], 
 
    result = array 
 
     .reduce(function (r, a) { 
 
      var last = r[r.length - 1]; 
 
      if (last && last.right + 1 === a.id) { 
 
       last.right = a.id; 
 
      } else { 
 
       r.push({ left: a.id, right: a.id }); 
 
      } 
 
      return r; 
 
     }, []); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Verwandte Themen