[英]Returning NULL from an empty array
我目前正在使用 JavaScript 學習基本的 web 開發,並參加了使用機器人更正代碼的在線課程。 我正在嘗試實現一個計算數組平均值的 function 。
let numbers = [1,2,3]
function average(array){
var total = 0;
var count = 0;
array.forEach(function(item){
total += item;
count++;
})
if (numbers.length > 0){
return total / count;
} else if (numbers = ([])) {
return null
}
}
該代碼在實踐中工作正常,但我收到一個錯誤返回,說1) defines average such that average([]) returns null
,就像發送一個空數組一樣, average([])
應該返回null
I無法弄清楚如何解決它...
在第二種情況下, numbers = ([])
將numbers
分配給[]
(總是返回true
)而不是比較它。 正確的方法是使用==
如下:
let numbers = [1,2,3] function average(array){ var total = 0; var count = 0; array.forEach(function(item){ total += item; count++; }) if (array.length > 0){ return total / count; } else if (array.length == 0) { return null } } console.log(average(numbers)); numbers = []; console.log(average(numbers));
編輯:
如評論中所述,還有另一個錯誤,您在 function 中使用numbers
而不是array
。
您不需要測試[]
。 如果數組的長度為零,則為空:
let numbers = [1, 2, 3] function average(array) { var total = 0; var count = 0; // No need to iterate over array if it's empty if (array.length > 0) { array.forEach(function(item) { total += item; count++; }) return total / count; } else { // If we got here, array.length === 0 return null } } console.log(average(numbers)); numbers = []; console.log(average(numbers));
如果沒有櫃台,我會讓它更簡單。 你有數組長度的總數。
我還使用array.reduce()添加了一個版本。
請不要在 function 中使用數字變量。 這里沒有任何意義。 您將變量傳遞給 function 並在 function 內部您應該使用接收到的變量,否則它將表現不正確。 function里面的數字叫做“arr”,所以一直用arr。
function average(arr){ if (arr.length === 0) return null; let total = 0; arr.forEach(function(item){ total += item; }) return total / arr.length; } // using array.reduce() which makes more sense here function average2(arr){ if (arr.length === 0) return null; const total = arr.reduce(function(prev,next){ return prev + next; }); return total / arr.length; } console.log(average([])); console.log(average([1,2,3])); console.log(average2([])); console.log(average2([1,2,3]));
測試用例失敗的原因是您在頂部定義numbers
,然后在 function 中重用它。 這樣它總是返回相同的。 您應該改用 function 中的array
。
這是您的腳本的簡短版本,以了解 js 的功能。
function average(array){ let total = array.reduce((acc, value) => acc + value, 0); return array.length > 0? total / array.length: null; } console.log(average([1,2,3])) console.log(average([]))
function average(array) {
if (typeof array == "object" && array.length > 0) {
var total = 0;
var count = 0;
array.forEach(function(item) {
total += item;
count++;
});
return total / count;
} else {
return null;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.