Ich habe das Folgende erstellt JSFiddle um meinen Ansatz für Ihre Frage zu demonstrieren.
(function() {
// Sample arrays
var //elements = ["0", "1", "2", "3", "4", "5", "6", "7"],
elements = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43"];
var splitElements = [],
delimiter = 10; // Change this value as needed
// parameters: array, number of elements to split the array by
if(elements.length > delimiter){
splitElements = splitArray(elements, delimiter);
}
else {
// No need to do anything if the array's length is less than the delimiter
splitElements = elements;
}
//Displaying result in console
for(element in splitElements){
if(splitElements.hasOwnProperty(element)){
console.log(element + " | " + splitElements[element]);
}
}
})();
function splitArray(elements, delimiter) {
var elements_length = elements.length;
if (elements_length > delimiter) {
var myArrays = [], // parent array, used to store each sub array
first = 0, // used to capture the first element in each sub array
index = 0; // used to set the index of each sub array
for (var i = 0; i < elements_length; ++i) {
if (i % delimiter === 0) {
// Capture the first element of each sub array from the original array, when i is a modulus factor of the delimiter.
first = i;
} else if (delimiter - (i % delimiter) === 1) {
// Build each sub array, from the original array, sliced every time the i one minus the modulus factor of the delimiter.
index = (i + 1) / delimiter - 1;
myArrays[index] = elements.slice(first, i + 1);
}
else if(i + 1 === elements_length){
// Build the last sub array which contain delimiter number or less elements
myArrays[index + 1] = elements.slice(first, i + 1);
}
}
// Returned is an array of arrays
return myArrays;
}
}
Zunächst einmal habe ich zwei Beispiele: ein Array mit weniger als acht Elementen und ein Array mit mehr als acht Elementen (kommentieren Sie das, was Sie nicht verwenden möchten).
Dann prüfe ich die Größe des Arrays, einfach, aber wichtig, um zusätzliche Berechnungen zu vermeiden. Wenn das Array die Kriterien erfüllt (Arraygröße > delimiter
) gehen wir in die splitArray
Funktion.
El splitArray
Funktion nimmt das Trennzeichen (d.h. 8, da Sie durch dieses trennen wollen) und das Array selbst auf. Da wir die Array-Länge oft wiederverwenden, speichere ich sie in einer Variablen, ebenso wie die first
y last
.
first
steht für die Position des ersten Elements in einem Array. Dieses Array ist ein Array, das aus 8 Elementen besteht. Um also das erste Element zu bestimmen, verwenden wir die Modulus-Operator .
myArrays
ist das Array der Arrays. Darin wird bei jedem Index ein beliebiges Unterfeld der Größe 8 oder kleiner gespeichert. Dies ist die Schlüsselstrategie für den folgenden Algorithmus.
index
stellt den Index für die myArrays
variabel. Jedes Mal, wenn ein Unterfeld mit 8 oder weniger Elementen gespeichert werden soll, muss es im entsprechenden Index gespeichert werden. Wenn wir also 27 Elemente haben, bedeutet das 4 Arrays. Das erste, zweite und dritte Array haben jeweils 8 Elemente. Das letzte hat nur 3 Elemente. Also index
sind 0, 1, 2 bzw. 3.
Der schwierige Teil ist einfach, die Mathematik zu verstehen und sie so gut wie möglich zu optimieren. Zum Beispiel else if (delimiter - (i % delimiter) === 1)
Dies dient dazu, das letzte Element zu finden, das in das Array aufgenommen werden soll, wenn ein Array voll ist (Beispiel: 10 Elemente enthalten).
Dieser Code funktioniert für jedes einzelne Szenario, Sie können sogar die delimiter
um eine beliebige Array-Größe zu erhalten, die Sie wünschen. Ziemlich cool, oder :-)
Haben Sie Fragen? Fragen Sie einfach in den Kommentaren unten.