Raketenwilli: Korrigiert, getestet und erläutert...

Beitrag lesen

   arg1.forEach(wert => (wert % 2 ? anzUngerade : anzGerade).push(korr005(wert));

Ich finde das erste grenzwertig und das zweite scheußlich 😉

Die dritte (von mir stehen gelassene) Variante wäre demnach „toll“? Das bedarf aber einer Korrektur (die Zahl der Klammern stimmt nicht...) und einer Kommentierung, weil nicht leicht ersichtlich ist, warum das funktioniert. Außerdem bedarf sowas eines anschaulichen Tests, der die Funktion zeigt:

"use strict";

/* Nur zum Verschönern der Ausgabe: */
function humanVisible( v ) {
	return JSON.stringify( v )
		.replace( /,/g, ' , ')
		.replace( /\[/g, '[ ' )
		.replace( /\]/g, ' ]' )
		.replace( /\{/g, '{ ' )
		.replace( /\}/g, ' }' )
	;
}

/* Naja. Die Funktion, welche die Werte verändert */ 
function korrekturFunktion( v ) {
	return ( v * 1.1 );
}

/* Ladys & Gentlemen! Es folgen die Werte in einem Array */
var arr = [0,1,2,3,4,5];

/* use strict erfordert eine Deklaration */
var arrG = [];
var arrU = [];

/* Was das tut:
 * Für jedes Element des Arrays arr als Variable item
 * 		WENN item % 2 „truly“ (e.g. != 0 ) ist,
 * 			DANN füge dem Array „arrU“ den korrigierten Wert hinzu,
 * 			SONST füge „arrG“ den korrigierten Wert hinzu,
 * 
*/
arr.forEach(
	item => ( item % 2 )
		? arrU.push( korrekturFunktion( item ) )
		: arrG.push( korrekturFunktion( item ) )  
);
/* Hint(0):
 * 	Man kann das also schöner als in einer Zeile notieren.
 * 
 * Hint(1):
 * 	Die Variable item ist danach nicht mehr definiert.
 * 
 * Hint(2):
 * 	Es wird ausgenutzt, dass in der Array-Methode arr.forEach 
 * 	Variablen in der „übergeordneten Umgebung“ (a.k.a. scope,
 * 	hier „arrG“ und “arrU“) überschrieben werden können.
 *
 * Letzteres halte ich für einen „Hirnfurz“ der Konstrukteure von JS
*/

/* „Schöne“ Ausgaben */
console.log( 
		"Array korrigierter gerader Zahlen:\n\t"
	+  	humanVisible( arrG ) 
	+	"\n\nArray korrigierter ungerader Zahlen:\n\t"
	+	humanVisible( arrU )
);

/* 
 * Ausgaben:
/*
Array korrigierter gerader Zahlen:
	[ 0 , 2.2 , 4.4 ]

Array korrigierter ungerader Zahlen:
	[ 1.1 , 3.3000000000000003 , 5.5 ]

* 
* Der von mir erwähnte „Fehler“ durch die binäre
* Speicherung ist in der zweiten Ausgabe sehr gut zu sehen
*/