【问题标题】:How to find the largest group of numbers in an array and return them separately in javascript?如何在数组中找到最大的一组数字并在javascript中分别返回它们?
【发布时间】:2018-12-13 23:46:10
【问题描述】:

如何创建一个只返回大于我输入的数字的函数? 我的代码在这里不起作用,我不知道为什么。

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var num = Number(prompt('number'));

function findBiggestNumbers(num) {
   for (var i = 0; i < arr.length; i++) {
      if (arr[i] > num) {
         num = arr[i];
      }
   }
   return num;
// }
console.log(findBiggestNumbers(num));

【问题讨论】:

  • 提示:构建一个新的数字数组,然后返回该数组。
  • 创建另一个数组,当您遇到原始数组的元素超过输入的数字时 - 将此元素添加到新数组中。

标签: javascript arrays function loops


【解决方案1】:

要使用数组,您可以使用filter 函数,它会返回带有某些条件的数组子集。所以,你可以简单地做:

var num = 5; //using 5 as an example

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

var b = a.filter(number => number > num);

你可以把它放到一个函数中。

【讨论】:

  • 你应该将结果存储在一个变量中!
【解决方案2】:

您需要创建一个新的空数组并用大于输入值的数字填充它。

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var num = Number(prompt('number'));

function FindBiggestNumbers(num) {
  let biggerThanArray = [];

  for (var i = 0; i < arr.length; i++) {
    if (arr[i] > num) {
      biggerThanArray.push(arr[i]);
    }
  }
  return biggerThanArray;
}

console.log(FindBiggestNumbers(num));

【讨论】:

    【解决方案3】:

    你可以开始理解并用函数式 JS 做一些有趣的事情。

    与 Daladier Sampaio 的回答类似,我使用 filter 返回一个数组,其中每个元素在 回调函数 中传递一个条件 (el > num)。 (filterreducemap 是在 ES5 中引入的,是非常有用的数组方法,非常值得学习如何使用。)

    在这个例子中,我传入了 - 并调用了 - 一个名为 greaterThan 的完整函数。

    greaterThan

    1) 接受一个参数 - n,在这种情况下是提示中的数字

    2) 返回一个数组 - 将对每个数组元素进行操作的回调函数。这个函数的有趣之处在于它在返回时会携带num 的副本。像这样保留其外部词法环境副本的函数称为closure。了解它们是什么以及它们如何工作是一项有用的 JS 技能,也是 JS 面试中经常提到的一项。

    const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    const num = Number(prompt('number'));
    
    // accepts a number and returns a callback function
    // that accepts an array element and
    // tests it against the value of `n`
    function greaterThan(n) {
      return function (el) {
        return el > n;
      };
    }
    
    // calling greater than with our prompted number
    // returns that new callback function that checks each
    // array element
    const out = arr.filter(greaterThan(num));
    console.log(out);

    现代 JS >= ES6 将允许您使用箭头函数来压缩必须编写的代码量。以下一行代码将代替示例中的函数:

    const greaterThan = n  => el => el > n;
    

    【讨论】:

      【解决方案4】:

      你可以使用Array.prototype.filter():

      function FindBiggestNumbers(num) {
        return arr.filter(n => n > num);
      }
      
      var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
      var number = Number(prompt("Enter a number"));
      console.log(FindBiggestNumbers(number));

      另一种方法是在for 循环中使用嵌套的if 语句,如下所示:

      首先新建一个数组:

      function FindBiggestNumbers(num) {
          var newArr = [];
      }
      

      然后循环遍历原始数组:

      function FindBiggestNumbers(num) {
          var newArr = [];
          for (var i = 0; i < arr.length; i++) {
      
          }
      }
      

      如果发现数组中的元素大于数字,将其添加到新数组中:

      function FindBiggestNumbers(num) {
          var newArr = [];
          for (var i = 0; i < arr.length; i++) {
              if (arr[i] > num) {
                  newArr.push(arr[i]);
              }
          }
      }
      

      最后,返回新数组:

      function FindBiggestNumbers(num) {
          var newArr = [];
          for (var i = 0; i < arr.length; i++) {
              if (arr[i] > num) {
                  newArr.push(arr[i]);
              }
          }
          return newArr;
      }
      

      演示:

      function FindBiggestNumbers(num) {
        var newArr = [];
        for (var i = 0; i < arr.length; i++) {
          if (arr[i] > num) {
            newArr.push(arr[i]);
          }
        }
        return newArr;
      }
      
      var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
      var number = Number(prompt("Enter a number"));
      console.log(FindBiggestNumbers(number));

      【讨论】:

      • 是时候学习一些函数式 JavaScript 了。像这样的代码肯定会为你带来一场现代 JavaScript 面试。
      • @AdrianBrand 我不知道函数式 JS - 你的解决方案是什么?
      • 阅读函数 JavaScript 并查看数组方法,如 filter、map、join 和最强大的 reduce 方法。你永远不会再接触 for 循环了。
      猜你喜欢
      • 1970-01-01
      • 2017-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-27
      • 2021-04-24
      • 2017-08-03
      • 2016-12-17
      相关资源
      最近更新 更多