當且僅當所有串列編號都大于零時,我無法回傳 true。當且僅當所有串列編號都大于零時,它應該回傳真。-5 在串列中,但在程式運行后,它回傳 true,而它應該是 false(“某些數字不是正數”)。
var allPositive = false;
var numberList = [2, -5, 1, 50, 4, 82, 34];
checkIfAllPositive();
console.log(allPositive);
if (allPositive == true)
{
console.log("All of the numbers are positive!");
}
else
{
console.log("Some of the numbers are not positive!");
}
function checkIfAllPositive()
{
for (var index = 0; index < numberList.length; index ) {
console.log(numberList[index] " " index " " (numberList[index] > 0));
if (numberList[index] <= 0)
{
allPositive = false;
} else {
allPositive = true;
}
}
}
uj5u.com熱心網友回復:
當您遍歷陣列時,您需要在其中一個 is 之后中斷false。
像這樣:
function checkIfAllPositive()
{
for (var index = 0; index < numberList.length; index ) {
console.log(numberList[index] " " index " " (numberList[index] > 0));
if (numberList[index] <= 0)
{
allPositive = false;
break;
} else {
allPositive = true;
}
}
}
這是因為一旦其中一個為假,它就會設定allPositive為假,但它會繼續下去,如果它找到另一個正數,那么allPositive即使那里有一個負數,它也會設定為真。
uj5u.com熱心網友回復:
您的函式中有一些需要調整的怪癖。
要解決您的問題,有不同的方法:
學習更有效和有用的是:
var numberList = [2, -5, 1, 50, 4, 82, 34];
function checkIfAllPositive(list) {
for (var index = 0; index < list.length; index ) {
if (list[index] <= 0) return false
}
return true
}
var allPositive = checkIfAllPositive(numberList)
console.log(allPositive)
訪問所有陣列元素,一旦發現負數(或 0),則回傳 false。如果在不回傳 a 的情況下仔細閱讀所有陣列元素false,則必須回傳,true因為所有值都是正數。
此代碼遵循一般規則盡可能避免副作用:
- 您不會更改函式體中的任何外部值。
- 如果沒有在引數宣告中命名,您將不會讀取函式中的任何值。
它們是程式員手冊的第十二條和第十三條誡命。這是一條你幾乎在任何地方都需要強制執行的救命規則,特別是對于 Javascript,它有一些可能會讓你發瘋的范圍警告。
你的代碼有一個嚴重的缺陷,除了依賴于輸入和輸出的副作用:當你評估串列中的一個值時,你將失去對前一個值的評估。除了我上面首選的程式解決方案之外,如果您想遵守我只推薦用于長函式的規則一進入-> 一退出。你必須考慮到這一點,也許計算負值(溶膠 b)
function checkIfAllPositive(numberList)
{
var negatives = 0;
for (var index = 0; index < numberList.length; index ) {
console.log(numberList[index] " " index " " (numberList[index] > 0));
if (numberList[index] <= 0)
{
negatives = 1;
}
}
return negatives > 0;
}
或者考慮到以前的值
function checkIfAllPositive(numberList)
{
var allPositiveSoFar = true;
for (var index = 0; index < numberList.length; index ) {
console.log(numberList[index] " " index " " (numberList[index] > 0));
if (numberList[index] <= 0)
{
// this is equivalent to allPosivitesSoFar = allPositiveSoFar && false;
allPositivesSoFar = false;
} else {
allPosivitesSoFar = allPositivevSoFar && true;
}
return negatives > 0;
}
如果您想獲得一點樂趣,您還可以使用一些函式式編程來使用陣列過濾器方法在一行中解決您的問題:
var numberList = [2, -5, 1, 50, 4, 82, 34]
var allPositive = numberList.filter(a => a <= 0).length == 0
console.log(allPositive)
您反轉測驗并選擇(即創建一個包含它們的新陣列)所有會導致錯誤回應的值。如果至少有一個,則運算式為假。
這是解決您的任務的一種不太有效的方法,因為即使第一個元素為負數,函式過濾器也會檢查所有元素。
更好的方法是使用Array 的一些方法
var numberList = [2, -5, 1, 50, 4, 82, 34]
var allPositive = !numberList.some(a => a <= 0)
console.log(allPositive)
我認為這是不言自明的:如果沒有(!)負值,數字都是正的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/389476.html
標籤:javascript 列表
