【问题标题】:Javascript Challenge: Loops - Multiple Conditions - stuck and can't figure this outJavascript 挑战:循环 - 多个条件 - 卡住了,无法弄清楚
【发布时间】:2021-07-23 06:19:28
【问题描述】:

我在函数和执行上下文上完成了这个模块 - 所有问题都进行得很顺利,但有一个挑战我花了很多时间但仍然无法解决。任何帮助将不胜感激。谢谢

挑战问题说: 编写一个函数addingAllTheWeirdStuff,将array2中所有奇数的和与array1中10以下的每个元素相加。

同样,addingAllTheWeirdStuff 也应该将 array2 中所有偶数的总和与 array1 中超过 10 的元素相加。

奖励:如果 array2 中的任何元素大于 20,则将 array1 中的每个元素加 1。

// Uncomment these to check your work!
// console.log(addingAllTheWeirdStuff([1, 3, 5, 17, 15], [1, 2, 3, 4, 5])); // expected log [10, 12, 14, 23, 21]
// console.log(addingAllTheWeirdStuff([1, 3, 5, 17, 15, 1], [1, 2, 3, 4, 5, 22])); // expected log [11, 13, 15, 46, 44, 11]

// my attempt so far:
function addingAllTheWeirdStuff(array1, array2) {
  // ADD CODE HERE
  let result = []
  for (let i = 0; i < array2.length; i++) {
    if (array2[i] > 20) {
      result = array1[i] += 1
    }
  }
  for (let i = 0; i < array2.length; i++) {
    if (array2[i] % 2 === 0 && array1[i] > 10) {
      result = array1[i] + array2[i]
    }
  }
  for (let i = 0; i < array2.length; i++) {
    if (array2[i] % 2 !== 0 && array1[i] < 10) {
      result = array1[i] + array2[i]
    }
  }
  return result
}

【问题讨论】:

  • 欢迎来到 StackOverflow(请使用 tour)——您似乎没有指出您的问题是什么。你能澄清一下吗?
  • 谢谢。是的,控制台日志旁边有“预期日志”的 cmets。这就是我应该得到的,但我没有得到这些数组作为我的答案,而是得到 8 个和 8 个作为我的两个答案.. 很远,甚至不是数组。
  • 一个问题是您正在用值覆盖result,而不是向数组添加值,例如result = array1[i] += 1。您可以使用push(value) 添加到数组中,例如result.push(array1[i]+1)
  • 谢谢帕特里克.. 我确实认为这是一个问题。我尝试 .push 进入数组,但这也不起作用。我能想到的唯一另一件事是创建一个 sum 变量并将所有结果添加到这个 sum 中,但是当尝试将 sum 放入数组时这也不起作用。对所有结果使用 .push 让我得到: [21, 2, 8] [2, 21, 2, 8]

标签: javascript loops conditional-statements


【解决方案1】:

您可以使用reduce 和map 数组方法以及三元运算符轻松实现此目的:

const array1 = [1, 3, 5, 17, 15];
const array2 = [1, 2, 3, 4, 5];

function addingAllTheWeirdStuff(array1, array2) {

    const oddSum = array2.reduce((sum, current) => current % 2 ? current + sum : 0 + sum, 0)
    const oddEven = array2.reduce((sum, current) => current % 2 == 0 ? current + sum : 0 + sum, 0)

    return array1.map(num => num < 10 ? num + oddSum : num + oddEven)

}

console.log(addingAllTheWeirdStuff(array1, array2))

【讨论】:

  • 谢谢 :) 需要学习这些方法!!
  • 谢谢!如果我的解决方案对您有帮助,您可以投票,在此先感谢 :)
  • 太棒了!所以它适用于我的问题中的第一个控制台登录,但不适用于第二个。控制台日志作为问题的一部分给出了预期的日志,但没有得到第二个使用它的日志。 (预期的答案在我的问题顶部注释掉)
【解决方案2】:

如果您将挑战分解成更小的部分,您可以更好地解构它并提出您的解决方案。

这就是我所做的......我将很快添加更多的 cmets 并提供更多解释

我选择继续使用循环,因为我认为这是挑战的重点(练习循环、多个条件等) - 换句话说,我选择不故意使用map / reduce,但如果允许的话,使用@charmful0x 的答案,因为它会减少代码:)

// function to get sum of all odd numbers in array
function getSumOfAllOddNumbersInArray( elementArray ){
  var sumOfOddNumbers = 0;
  
  for (let i = 0; i < elementArray.length; i++) {
    // use remainder operator to find out if element is odd or not
    if (elementArray[i] % 2 !== 0 ) {
      sumOfOddNumbers += elementArray[i];
    }
  }
  
  return sumOfOddNumbers;
}

// function to get sum of all EVEN numbers in array
function getSumOfAllEvenNumbersInArray( elementArray ){
  var sumOfEvenNumbers = 0;
  
  for (let i = 0; i < elementArray.length; i++) {
    // use remainder operator to find out if element is odd or not
    if (elementArray[i] % 2 === 0 ) {
      sumOfEvenNumbers += elementArray[i];
    }
  }
  
  return sumOfEvenNumbers;
}

// Return true if there is at least one element in array that is greater than 20
function hasElementOverTwenty( elementArray ){
  for (let i = 0; i < elementArray.length; i++) {
    if (elementArray[i] > 20 ) {
      // no need to keep looping, we found one - exit function
      return true;
    }
  }
  
  return false;
}


function addingAllTheWeirdStuff( firstArray, secondArray ){
  var sumOfOddNumbersInArray = getSumOfAllOddNumbersInArray( secondArray );
  var sumOfEvenNumbersInArray = getSumOfAllEvenNumbersInArray( secondArray );
  var needToAddOne = hasElementOverTwenty( secondArray );
    
  for (let i = 0; i < firstArray.length; i++) {
    // Challenge One
    if (firstArray[i] < 10) {
      firstArray[i] = firstArray[i] + sumOfOddNumbersInArray;       
      
    } else if (firstArray[i] > 10) {
    // Challenge Two
      firstArray[i] = firstArray[i] + sumOfEvenNumbersInArray;       
    }
    
    // bonus
    if( needToAddOne ){
      firstArray[i]++;
    }   
  }
  
  return firstArray;
}

// Uncomment these to check your work!
console.log(addingAllTheWeirdStuff([1, 3, 5, 17, 15], [1, 2, 3, 4, 5])); 
console.log('expected:' + [10, 12, 14, 23, 21] );
console.log(addingAllTheWeirdStuff([1, 3, 5, 17, 15, 1], [1, 2, 3, 4, 5, 22]));
console.log('expected:' + [11, 13, 15, 46, 44, 11] );
Challenge question says: Write a function addingAllTheWeirdStuff which adds the sum of all the odd numbers in array2 to each element under 10 in array1.

Similarly, addingAllTheWeirdStuff should also add the sum of all the even numbers in array2 to those elements over 10 in array1.

BONUS: If any element in array2 is greater than 20, add 1 to every element in array1.

【讨论】:

    猜你喜欢
    • 2019-09-15
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 2023-03-25
    相关资源
    最近更新 更多