Array-Partitionierungsalgorithmus
Um ein Array aufzuteilen, folgen Sie diesen Schritten:
- Öffnen Sie das Terminal/SSH und geben Sie
node
ein, um mit der Code-Praxis zu beginnen.
- Wenden Sie die bereitgestellte Funktion
fn
auf jedes Element im angegebenen Array arr
an.
- Teilen Sie das Array jedes Mal auf, wenn
fn
einen neuen Wert zurückgibt.
- Verwenden Sie
Array.prototype.reduce()
, um ein Akkumulator-Objekt zu erstellen, das das resultierende Array und den letzten Wert enthält, der von fn
zurückgegeben wurde.
- Verwenden Sie
Array.prototype.push()
, um jedes Element in arr
der entsprechenden Partition im Akkumulator-Array hinzuzufügen.
- Geben Sie das resultierende Array zurück.
Hier ist die Codeimplementierung:
const partitionBy = (arr, fn) =>
arr.reduce(
({ res, last }, v, i, a) => {
const next = fn(v, i, a);
if (next !== last) res.push([v]);
else res[res.length - 1].push(v);
return { res, last: next };
},
{ res: [] }
).res;
Beispielverwendung:
const numbers = [1, 1, 3, 3, 4, 5, 5, 5];
partitionBy(numbers, (n) => n % 2 === 0); // [[1, 1, 3, 3], [4], [5, 5, 5]]
partitionBy(numbers, (n) => n); // [[1, 1], [3, 3], [4], [5, 5, 5]]