Ich habe diese Lösung hinzugefügt zu @dystroys jspref hier und es erscheint doppelt so schnell laufen wie die anderen Lösungen. Bearbeiten: in Safari und Chrome, aber nicht in Firefox
Hier ist eine funktionelle Lösung, um die Mischung der Antworten hier zu ergänzen.
Es handelt sich um eine Funktion höherer Ordnung namens toPartitions
die einen Callback für die reduce-Methode von underscore oder die native array reduce-Methode zurückgibt.
Beispiel für die Verwendung:
[1,2,3,4,5,6,7,8,9].reduce( toPartitions( 3 ), [] );
Die Funktion:
function toPartitions ( size ) {
var partition = [];
return function ( acc, v ) {
partition.push( v );
if ( partition.length === size ) {
acc.push( partition );
partition = [];
}
return acc;
};
}
Wie Clojure's Partition wird keine Endpartition eingefügt, wenn nicht genügend Elemente vorhanden sind.
In Ihrem Beispiel könnten Sie das tun:
arrayALLPartionned = arrayAll.reduce( toPartitions( 3 ), [] ) );
Wenn Sie dies nicht mit reduce
aber eine Funktion, die ein Array und die Größe der Partition annimmt, könnte ausreichen:
function partition ( arr, size ) {
return arr.reduce( toPartitions( size ), [] );
}
Die Lösung wäre also einfach:
arrayALLPartionned = partition( arrayAll, 3 );