這是問題:
“撰寫一個函式addingAllTheWeirdStuff,將array2中所有奇數的總和與array1中10以下的每個元素相加。同樣,addingAllTheWeirdStuff也應該將array2中所有偶數的總和與array1中10以上的元素相加。
獎勵:如果 array2 中的任何元素大于 20,則將 1 添加到 array1 中的每個元素。”
我得到了第一部分的作業。我似乎無法弄清楚如何讓第二部分作業。這是我嘗試過的:
function addingAllTheWeirdStuff(array1, array2){
// ADD CODE HERE
let sumOdd = 0;
let sumEven = 0;
for (let i = 0; i < array2.length; i ) {
if (array2[i] % 2 !== 0) {
sumOdd = array2[i];
} else {
sumEven = array2[i];
}
}
for (let i =0; i < array1.length; i ) {
if (array1[i] < 10) {
array1[i] = sumOdd;
} else if (array1[i] > 10) {
array1[i] = sumEven;
}
for (let i =0; i < array2.length; i ) {
if (array2[i] > 20) {
for (let i =0; i < array1.length; i ) {
array1[i] = 1;
return array1;
}
return array1;
}
}
return array1;
}
關于如何使問題的最后一部分起作用的任何建議?
提前致謝。
uj5u.com熱心網友回復:
你快到了。Wile 測驗奇數或偶數,您也可以測驗>20. 在第二個回圈中,也只需添加這些數字。
function addingAllTheWeirdStuff(array1, array2){
let sumOdd = 0;
let sumEven = 0;
// ==> EXTRA VARIABLE
let great20 = 0;
for (let i = 0; i < array2.length; i ) {
if (array2[i] % 2 !== 0) {
sumOdd = array2[i];
} else {
sumEven = array2[i];
}
// ===> TEST if >20, If so, add one;
if(array2[i] > 20) great20;
}
for (let i =0; i < array1.length; i ) {
// ==> ADD great 20
array1[i] = great20;
if (array1[i] < 10) {
array1[i] = sumOdd;
} else if (array1[i] > 10) {
array1[i] = sumEven;
}
return array1;
}
return array1;
}
uj5u.com熱心網友回復:
首先,我洗掉了一些不必要的大括號并平衡了它們以使其更具可讀性(至少對我而言)
然后我洗掉了您的最后一個嵌套回圈,因為它沒有必要且效率低下。當您回圈array2獲取sumOdd& 時,sumEven您可以同時檢查是否有任何元素>20并將其存盤在變數 ( greaterThan20) 中。然后在添加總和時,您可以檢查相同的 var 以添加 1
function addingAllTheWeirdStuff(array1, array2) {
// ADD CODE HERE
let sumOdd = 0;
let sumEven = 0;
let greaterThan20 = false; // false by default
for (let i = 0; i < array2.length; i ) {
if (array2[i] % 2 !== 0)
sumOdd = array2[i];
else
sumEven = array2[i];
if (array2[i] > 20)// check if any element > 20
greaterThan20 = true;
}
for (let i = 0; i < array1.length; i ) {
if (array1[i] < 10)
array1[i] = sumOdd;
else if (array1[i] > 10)
array1[i] = sumEven;
if (greaterThan20)// add the 1 if greater than 20
array1[i] = 1;
}
return array1;
}
uj5u.com熱心網友回復:
你return在錯誤的地方使用導致函式在第一個之后停止number>20而不是繼續所有數字
你也可以合并第一個和最后一個回圈,我只是這樣留下來更清晰
function addingAllTheWeirdStuff(array1, array2) {
// ADD CODE HERE
let sumOdd = 0;
let sumEven = 0;
for (let i = 0; i < array2.length; i ) {
if (array2[i] % 2 !== 0) {
sumOdd = array2[i];
} else {
sumEven = array2[i];
}
}
for (let i = 0; i < array1.length; i ) {
if (array1[i] < 10) {
array1[i] = sumOdd;
} else if (array1[i] > 10) {
array1[i] = sumEven;
}
}
// moved this outside of the above loop
for (let i = 0; i < array2.length; i ) {
if (array2[i] > 20) {
for (let i = 0; i < array1.length; i ) {
array1[i] = 1;
// return array1; remove this line
}
}
}
return array1; // now return
}
uj5u.com熱心網友回復:
正如有人指出的那樣,在您的代碼中,您的內部回圈中有一個 return 陳述句,該陳述句正在中斷回圈。
我還在這里添加了一個替代解決方案,只是為了多樣性。首先使用 filter 和 reduce 計算奇數和偶數和。我還檢查是否有任何元素超過 20。基于 arr2.some 的真/假值,我映射了 arr1
const arr1 = [4, 5, 6, 7, 8, 9, 10, 11, 12]
const arr2 = [6, 7, 8, 9, 10, 11, 12, 13, 14, 21]
function addingAllTheWeirdStuff(arr1, arr2) {
let oddSum = arr2.filter(el => el % 2 != 0).reduce((a, n) => a n)
let evenSum = arr2.filter(el => el % 2 == 0).reduce((a, n) => a n)
const over20 = arr2.some(el => el > 20)
if (over20) {
return arr1.map(el => el > 10 ? el = evenSum : el = oddSum)
} else {
return arr1.map(el => el > 10 ? el = evenSum : el = oddSum)
}
}
console.log(addingAllTheWeirdStuff(arr1, arr2))
uj5u.com熱心網友回復:
const addingAllTheWeirdStuff=(a,b)=>a.map(i=>(i>10?i b.reduce((s,c)=>s ((c%2)?c:0),0):((i<10)?i b.reduce((s,c)=>s (!(c%2)?c:0),0):i)) b.some(e=>e>20));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/319237.html
標籤:javascript 循环 for循环 多条件
上一篇:將主要游戲回圈轉化為功能
