我有这两个函数,都生成一个从开始到结束的范围,其中start和end是整数。它们看起来像这样:
function range(start, end) {
var result = [];
for (var i = start; i <= end; i++) {
result.push(i);
}
return result;
}
console.log(range(1,5));
//Expected output [1, 2, 3, 4, 5]
function functional_range(start, end) {
function functional_range_helper(result, strt, nd) {
if (strt > nd) return [];
if (strt === nd) {
return result;
} else {
return functional_range_helper(result.push(strt), strt + 1, nd);
}
}
return functional_range_helper([], start, end);
}
console.log(functional_range(1,5));
//Expected output [1, 2, 3, 4, 5]
第一个完美运行。使用&#34; TypeError:result.push的第二个错误不是函数。&#34;我不明白为什么会发生这种情况,因为我将数组作为辅助函数的第一个参数传递,并在辅助函数中使用正确的参数名来引用它。它是一个数组,为什么我会收到此错误?
答案 0 :(得分:5)
Array.prototype.push()
返回新长度,而不是数组。所以functional_range_helper(result.push(strt), strt + 1, nd)
传递一个数字作为第一个参数而不是数组。
答案 1 :(得分:2)
问题是.push()不返回数组,它返回长度。所以“result.push(strt)”的返回值将是一个整数,而不是你期望的数组。
要修复,请在单独的步骤中按下该值:
function functional_range(start, end) {
function functional_range_helper(result, strt, nd) {
if (strt > nd) return [];
if (strt === nd) {
return result;
} else {
result.push(strt);
return functional_range_helper(result, strt + 1, nd);
}
}
return functional_range_helper([], start, end);
}