Code zu korrigieren :
function averages(numbers) {
if (!Array.isArray(numbers)) {
return [];
}
for(var i=0; i<numbers.length; i++){
if(numbers.length < 2){
return [];
} else {
numbers[i] = (numbers[i] + numbers[i+1])/2;
}
}
numbers.pop();
return numbers
}
Ich verwende Array.isArray
, um zu überprüfen, ob es wirklich ein Array ist. Es ist eine integrierte Funktion, also sollten Sie sie verwenden.
Sie können in einem Schritt dieses und die Länge überprüfen, mehr Schritte speichern (sehen Sie das Beispiel unten).
Um eine sauberere Lösung zu bieten:
function averages(numbers) {
if (!Array.isArray(numbers) || numbers.length < 2) {
return [];
}
for(var i = 0; i < numbers.length - 1; i++){
numbers[i] = (numbers[i] + numbers[i + 1])/2;
}
numbers.pop();
return numbers
}
Es funktioniert gut, habe ich auch noch eine "-1" auf der Schleife, als die letzte Zahl wird "NaN" werden (Not a Number), weil es ist kein Element danach und (10 + undefined)/2 => NaN/2 => NaN
. Dies fügt Ihrem Algorithmus auch einen unnötigen Schritt hinzu.
Um es
Eine andere Lösung Array vervollständigen machen könnte sein: Karte:
function averages(numbers) {
if (!Array.isArray(numbers) || numbers.length < 2) {
return [];
}
numbers.map(function(val, idx, arr) {
arr[idx] = (val + arr[idx+1])/2;
});
numbers.pop();
return numbers;
}
gut, was erwarten Sie 'length' zu sein, wenn' null' als Parameter übergeben wird? – UnholySheep
Sie übergeben Zahlen an Ihre Funktion, die ein Array sein sollte, wenn nicht, wird es diesen Fehler zeigen. Seien Sie also vorsichtig, wenn Sie immer ein Array übergeben, auch wenn es nur eine Nummer ist. – LordNeo