簡體   English   中英

從空數組返回 NULL

[英]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([]))

  • 您在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM