1046 Stimmen

Array in Stücke aufteilen

Nehmen wir an, dass ich ein Javascript-Array habe, das wie folgt aussieht:

["Element 1","Element 2","Element 3",...]; // with close to a hundred elements.

Welcher Ansatz wäre angemessen, um das Array in viele kleinere Arrays mit, sagen wir, höchstens 10 Elementen aufzuteilen?

1voto

M3ghana Punkte 1161

Hallo, versuchen Sie das -

 function split(arr, howMany) {
        var newArr = []; start = 0; end = howMany;
        for(var i=1; i<= Math.ceil(arr.length / howMany); i++) {
            newArr.push(arr.slice(start, end));
            start = start + howMany;
            end = end + howMany
        }
        console.log(newArr)
    }
    split([1,2,3,4,55,6,7,8,8,9],3)

1voto

aecend Punkte 2262

Falls dies für jemanden nützlich ist, kann dies in RxJS 6 sehr einfach durchgeführt werden:

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
from(arr).pipe(bufferCount(3)).subscribe(chunk => console.log(chunk));

Ausgänge: [1, 2, 3] [4, 5, 6] [7, 8, 9] [10, 11, 12] [13, 14, 15] [16]

0voto

SeaWarrior404 Punkte 3486

Ich bevorzuge die Spleißmethode anstelle des Aufschneidens. Diese Lösung verwendet die Array-Länge und die Chunk-Größe, um eine Schleifenanzahl zu erstellen, und führt dann Schleifen über das Array aus, das nach jeder Operation aufgrund des Splicings bei jedem Schritt kleiner wird.

    function chunk(array, size) {
      let resultArray = [];
      let chunkSize = array.length/size;
      for(i=0; i<chunkSize; i++) {
        resultArray.push(array.splice(0, size));
      }
    return console.log(resultArray);
    }
    chunk([1,2,3,4,5,6,7,8], 2);

Wenn Sie das ursprüngliche Array nicht verändern wollen, können Sie das ursprüngliche Array mit dem Spread-Operator klonen und dann dieses Array zur Lösung des Problems verwenden.

    let clonedArray = [...OriginalArray]

0voto

Patrick Chu Punkte 1225
# in coffeescript
# assume "ar" is the original array
# newAr is the new array of arrays

newAr = []
chunk = 10
for i in [0... ar.length] by chunk
   newAr.push ar[i... i+chunk]

# or, print out the elements one line per chunk
for i in [0... ar.length] by chunk
   console.log ar[i... i+chunk].join ' '

0voto

nevace Punkte 689

Ich habe BlazeMonger's leicht geändert, um für ein jQuery-Objekt zu verwenden.

var $list = $('li'),
    $listRows = [];

for (var i = 0, len = $list.length, chunk = 4, n = 0; i < len; i += chunk, n++) {
   $listRows[n] = $list.slice(i, i + chunk);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X