【问题标题】:I need guidance to solve my JavaScript problem我需要指导来解决我的 JavaScript 问题
【发布时间】:2020-12-06 00:28:33
【问题描述】:

创建一个名为“bigOrSmall”的函数,它接受一个参数“arr”,它将是一个数字数组。在 bigOrSmall 函数内部,创建一个名为“answers”的新数组。然后,遍历传入的 arr 参数,并检查数组中的数字是否大于 100。如果是,将“big”作为字符串推送到 answers 数组。如果数字小于或等于 100,则将“small”作为字符串推送到 answers 数组。返回函数内部的 answers 数组。

这是我目前所拥有的。

function bigOrSmall(answers) {
    for(let i = 0; i > 100; i++) {
        return answers('big')
        if(let i = 0; i <= 100; i++) {
            return answers('small')
        }
        answers(arr[i])
    }
    return answers,
}

显然我知道我做的不对,因为它没有通过测试,但我想知道我是否走在正确的轨道上并获得一些提示,让我朝着正确的方向前进。

【问题讨论】:

  • 欢迎来到 SO!我认为您应该重新审视iffor 语法。 if(let i = 0; i &lt;= 100; i++) { 混淆了两者。您的外部循环应该遍历数组,因此将问题分解为多个步骤:(1)如何遍历数组? (2) 如何在循环内添加条件来检查当前数组索引是否符合条件? (3) 如何将此条件的结果推送到结果数组中。 return answers('big') 将在循环的第一次迭代时立即结束函数。但是循环不会运行,因为条件总是错误的。希望这会有所帮助。
  • 第一个问题是带有for(let i = 0; i &gt; 100; i++)这个标头的循环永远不会运行,因为i &gt; 100在第一次通过时已经是假的。

标签: javascript arrays function for-loop


【解决方案1】:

在循环内部,您使用return 在第一次迭代中终止函数。

你可以重构你的代码如下:

function bigOrSmall(arr) {
  const answers = [];
  for(let i = 0; i < arr.length; i++) {
    if (arr[i] <= 100) {
      answers.push('small');
    } else {
      answers.push('big');
    }
  }
  return answers
}

console.log(bigOrSmall([0, 105, 100]))

或者您可以使用Array.map() 使其成为单线

const mapped = [0,105,100].map(item => item <= 100 ? 'small' : 'big')

console.log(mapped)

【讨论】:

  • 非常感谢!这更有意义&我完全明白我做错了什么,当然我需要使用 push() 方法和 .length() 方法。
  • 不客气。很高兴听到它有帮助。我建议您考虑使用Array.map() 方法进行此类操作。它增加了可读性。
【解决方案2】:
  function bigOrSmall(arr) {
     const answer = =[] 
            for(let i = 0; i < arr.length; i++) {
               if (arr[i] <= 100) {
               answer.push('small)
            } else {
              answer.push('big') 
            }
            return answers,
        }

首先,参数应该是一个数字数组,这就是我写(arr)的原因, 那么你需要声明答案数组。然后使用循环从 0 迭代到数组的长度(您的原始循环不会停止,因为它会永远递增),然后将每个数字与 100 进行比较,然后将字符串推送到答案数组中。你也可以使用 map 或 forEach 方法,让它看起来更干净

【讨论】:

    【解决方案3】:

    我真的很抱歉这么说,但是,你做错了几乎所有事情。现在,跟着我到下面给出的代码的末尾。它将帮助您了解如何做事(非常仔细地阅读 cmets):

    // defining function bigOrSmall which take parameter 'arr'
    function bigOrSmall(arr) { // notice: `arr`
        let answers = []; // declare `answers` array
        for(let i = 0; i < arr.length; i++) { // iterate over `arr` array using index
            if(arr[i] > 100) { // if i_th index of `arr` array is greater than 100
                answers.push('big'); // then, push `big`
            } else { // otherwise
                answers.push('small'); // push small
            }
        }
        return answers; // at last return `answers` array
    }
    
    let someIntegers = [1, 2, 300, 40, 229, 100]; // declare some input
    
    let ans = bigOrSmall(someIntegers); // pass `someIntegers` in `bigOrSmall` function and capture the returned `answers` array into `ans` variable
    // note: `someIntegers` is going to be passed as `arr` inside `bigOrSmall` function
    
    console.log(ans); // print the returned answer
    

    程序的输出是:

    [ 'small', 'small', 'big', 'small', 'big', 'small' ]
    

    【讨论】:

      【解决方案4】:

      这对我来说看起来更好尝试一下。

      function bigOrSmall(answers){
      
            var small = true;
            answers.forEach(item => {
              (item <= 100) ? small = true : false;
            });
            (small == true) ? answers.push('big') : answers.push('small');
            return answers
      }
      

      【讨论】:

        猜你喜欢
        • 2020-08-06
        • 2021-04-06
        • 2016-02-13
        • 2022-06-10
        • 2020-09-26
        • 2022-11-29
        • 2021-07-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多