【问题标题】:Search an Array made of integers in Javascript and return new array with values在 Javascript 中搜索由整数组成的数组并返回带有值的新数组
【发布时间】:2015-10-19 18:59:48
【问题描述】:

我正在尝试从 JavaScript 的 for 循环中的 if 条件创建一个新数组。到目前为止,新数组在以下情况下返回未定义:

if( numbers[i] <= num)

我需要返回所有小于或等于 num 值的元素,并从中创建一个新数组。谁能告诉我我做错了什么?

function search(num, numbers) {
  for (i = 0; i < numbers.length; i++){
  var x = [];

    if( numbers[i] <= num){
    x.push(numbers[i]);}
  }
 return x;
 }

(search(14, [7, 3, 23, 9, 14, 20, 7])

【问题讨论】:

  • 你做错了,你在每个循环中重新声明var x = []

标签: javascript arrays if-statement search


【解决方案1】:

你应该使用array.filter

function search(num, numbers) {
    return numbers.filter(function(n) { return n <= num });
}

search(5, [1,3,44,7,10]) //returns [1,3]

上述代码的核心问题是,您在 for 循环的每次迭代中都声明了 var x = [] - 它每次都会被覆盖。

【讨论】:

    【解决方案2】:
    1. 没有称为“价格”的数组。你应该替换“价格” 用“数字”。这就是你不确定的原因。
    2. 将 x=[] 移到 for 循环之外。否则,x 将在每次通过 for 循环时用一个空数组实例化。每次您的函数遍历循环时,您的代码似乎都会删除 x 的内容。

    function search(num, numbers) {
        var x = [];
      for (i = 0; i < numbers.length; i++){
      
    
        if( numbers[i] <= num){
        x.push(numbers[i]);}
      }
     return x;
     }
    
    $('p').text(search(14, [7, 3, 23, 9, 14, 20, 7]));
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
    <p></p>

    fiddle

    【讨论】:

      【解决方案3】:

      看起来您正在迭代另一个数组“价格”,其长度可能大于数字数组,这就是您未定义的原因。

      将 x=[] 移到 for 循环之外,因为它正在为 for 循环的每个值重置

      “价格.长度”

      您可以为此使用 underscore.js 过滤功能

       bigValues = function(array){
              return _.filter(array, function(element){ 
                return element > 10; 
              });
          }
      var array = [ 1, 2, 3, 10, 11, 23 ];
      
      var bigResult = bigValues(array);
      

      【讨论】:

        猜你喜欢
        • 2015-09-14
        • 2013-08-29
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多