2016-12-14 2 views
1

Ich habe ein Array mit ganzen Zahlen gegeben und möchte ein neues Array mit den Durchschnitten jeder Integer-Zahl und seinem Nachfolger erstellen. Um dies zu erreichen, habe ich versucht, die map Funktion zu verwenden.Rückgabe undefined aus Kartenfunktion - Code Kriege

var arr = [1,2,3,4]; 

arr.map(function(a, b){ 
    return (a + b/2); 
}); 

Ich glaube, dass dies funktioniert, als ob ich diese laufen in der Konsole alles wie erwartet funktioniert, aber das Problem ist, dass es nicht definiert ist zurückkehrt, wo die Herausforderung eingestellt ist. Die challenge is set here. Gibt es etwas Dummes, das ich vermisse?

Antwort

2

Sie könnten die Callback-Parameter für Array#map verwenden, also das Element selbst, den Index und die Referenz auf das Array. Weisen Sie das Ergebnis dann einer Variablen zu und überspringen Sie das erste Element, da Sie ein weiteres Element nach Bedarf erhalten.

var arr = [1, 2, 3, 4], 
 
    result = arr.map(function(a, i, aa) { 
 
     return (aa[i - 1] + a)/2; 
 
    }); 
 

 
result.shift(); 
 
console.log(result);

Eine andere mögliche Lösung mit Array#reduce, die mehr Ihren Versuch abbildet.

var arr = [1, 2, 3, 4], 
 
    result = []; 
 

 
arr.reduce(function(a, b) { 
 
    result.push((a + b)/2); 
 
    return b; 
 
}); 
 

 
console.log(result);

+0

dank @nina verstehen! nette Lösung –

0

eine Basislösung mit Iteration sein könnte.

foo = function(arr){ 
    var result=[]; 
    for(var i=0; i<arr.length-1; i++) { 
    result.push((arr[i]+arr[i+1])/2) 
    } 
    return result; 
} 
+0

gibt es einen Syntaxfehler in Ihrer Antwort. Danke für die Antwort tho :-) –

+0

danke, Semikolon sollte anstelle von Komma sein -)) – marmeladze

0

Sie sollten Karte() oder verringern() oder Filter