【问题标题】:Function Returning Square Brackets When Using Array Methods使用数组方法时返回方括号的函数
【发布时间】:2015-09-05 11:54:33
【问题描述】:

我刚刚开始在一本名为 Eloquent JavaScript 的书的第 4 章中进行练习。练习要求我执行以下操作:

"写一个范围函数,它有两个参数,开始和结束,并且 返回一个数组,其中包含从开始到(和 包括)结束。”

但是,当我编写以下代码时:

function range(start, end) {
  array = [];
for (var i = start; i <= end; i += 1) {
  array.push(i);
}
  return array;
}

console.log(range(5, 2));

它返回方括号( [] )。有谁知道问题可能是什么?非常感谢!

【问题讨论】:

  • 如果你 增加 索引,你不能从 5 开始并在 2 结束 - 没有意义。这就像试图同时向后和向前走。尝试交换 5 和 2,看看会发生什么。
  • start 不应大于 end
  • 哦,那是我的愚蠢>_>。并且想到我花了这么长时间认为这是另一回事。感谢您的帮助!

标签: javascript arrays function


【解决方案1】:

您以错误的顺序传递范围索引。你不能从 5 到 2,你需要从 2 到 5

range(2,5)

【讨论】:

    【解决方案2】:

    返回方括号表示一个空列表。这可能是也可能不是预期的结果。

    稍微扩展您的问题 - 您可以使用更灵活且能够生成降序列表的范围函数。例如见下文,或this fiddle

    function range(start, end) {
        array = [];
        // Determine order
        var delta = (start < end)? 1 : -1;
    
        for (var i = start; num_compare(i,end,delta); i += delta) {
            array.push(i);
        }
        return array;
    }
    
    function num_compare(a,b, delta) {
        if(delta == 0) { return false; } // No change? Avoid infinite loop.
        if(delta < 0)  { return a >= b; } // Descending. Continue while a>=b
        if(delta > 0)  { return a <= b; } // Asecending. Continue while a<=b
    }
    
    var answer = range(5,2);
    console.log(answer);
    document.getElementById("answer").innerHTML = answer.toString();
    

    现在传入range(5,2); 将生成(可能需要)[5,4,3,2] 列表。

    注意的相关问题/答案包括: reversing order in for loop, comparison operators

    【讨论】:

      猜你喜欢
      • 2020-09-18
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 2018-07-26
      相关资源
      最近更新 更多