Orlok: reduce() ist heute sehr eigensinnig!

Beitrag lesen

Hallo

Wenn ich der Methode einen Ausgangswert von 0 hinzufüge, ist das Resultat undefined

Aber nicht deswegen.

var arr = [{key1: 12, key2: 21, key3: 31}, {key1: 11, key2: 12, key3: 13}];

var ObjektIndex_finden = arr.reduce(function(acc, curr){
	if (curr.key2 === 21) {
		acc = arr.indexOf(curr);
		return acc;
	}	
}, 0);


console.log(ObjektIndex_finden);

Schau mal genau hin, wo du dein return‐Statement notiert hast.

Wenn die Bedingung nicht wahr ist, gibt dein Reducer implizit den Wert undefined zurück. Du willst aber immer den akkumulierten Wert zurückgeben, wobei in dem Fall, dass die Bedingung wahr ist, der Wert angepasst wird.

var ObjektIndex_finden = arr.reduce(function(acc, curr, index){
	if (curr.key2 === 21) {
		acc = index;
	}	
	return acc;
}, 0);

Wenn du es so schreibst, wird dir der richtige Index ausgegeben. Den du übrigens nicht mit der Methode indexOf ermitteln musst. Der Index wird als drittes Argument an deine Rückruffunktion übergeben.

Viele Grüße,

Orlok