Ich habe verschiedene Arten von Javascript-Objekten, alle haben eine Eigenschaft 'row'.

var row1 = {
    row: 1
};

var row2 = {
    row: 2
};

var row3 = {
    row: 3
};

var row4 = {
    row: 4
};

...

Ich habe ein Array wie folgt definiert:

var objArray = [];

In diesem Array können mehrere 'Zeilen' vorhanden sein. Die Reihenfolge ist von der unteren bis zur oberen Reihe immer dieselbe.

Jetzt möchte ich die Objekte erhalten, die nebeneinander verknüpft sind (wie 4 in einer Reihe). In meinem Fall ist es auch möglich, 3 in einer Reihe, 5 in einer Reihe und so weiter zu haben.

Beispiel:

objArray.push(row0);
objArray.push(row1);
objArray.push(row2);
objArray.push(row3);
objArray.push(row5);
objArray.push(row6);
objArray.push(row7);
objArray.push(row9);
objArray.push(row10);
objArray.push(row12);

In diesem Fall benötige ich 2 Listen, eine mit Zeile 0 bis 3 und eine mit 5 bis 7.

Ich habe ein bisschen in dieser JSFiddle versucht: Hier können wir die Konsolenausgabe sehen Wenn Sie weitere Informationen benötigen, fragen Sie bitte.

Danke im Voraus!

0
Dieterg 28 Nov. 2013 im 15:40

2 Antworten

Beste Antwort

Ich habe eine Geige gemacht, die genau das für dich tut:

    for(var i = 0; i < objArray.length; i++) {
    if(currentnum !== -1)
    {
         var result = objArray[i].row - currentnum;
        currentnum = objArray[i].row;
        if(result === 1)
        {
         currentarray.push(objArray[i]);   
        } else {
            arrayofarrays.push(currentarray);
            currentarray = [];
            currentarray.push(objArray[i]);
        }
    }  else {
        currentnum = objArray[i].row;
        currentarray.push(objArray[i]);
    }
}
arrayofarrays.push(currentarray);

http://jsfiddle.net/B76a8/6/

1
woutervs 28 Nov. 2013 im 11:57

Lassen Sie uns zuerst das Array sortieren:

objArray.sort(function(a,b){ return a.row - b.row });

Dann sollte dies für das gegebene n das nächste und vorherige Element zurückgeben:

function getElement(array, n)
{
 var ret = [];
 for (var i=0; i<array.length; i++)
   if (array[i].row == n)
   {
    if (i > 0) ret.push(array[i-1]);
    if (i < array.length-1) ret.push(array[i+1]);
   }

 return ret;
}

Da es etwas anderes ist, alle anderen Optionen mit derselben Farbe zu erhalten, gehen wir Folgendes durch:

function getByColor(array, color)
{
 var ret = [];
 for (var i=0; i<array.length; i++)
  if (array[i].color == color)
   ret.push(array[i]);

 return ret;
}

Anschließend können Sie beide Arrays mithilfe von concat zusammenführen.

0
eithed 28 Nov. 2013 im 12:07