使用数组方法时返回方括号的函数

Function Returning Square Brackets When Using Array Methods

本文关键字:方括号 函数 返回 数组 方法      更新时间:2023-09-26

我刚刚开始了一本名为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,你需要从 2 到 5

range(2,5)

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

为了稍微扩展您的问题 - 您可以使用更灵活且能够生成降序列表的范围函数。例如,请参阅下面的小提琴,或在此小提琴中。

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("answerswer").innerHTML = answer.toString();

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

值得注意的相关问题/答案包括:for 循环中的反转顺序,比较运算符