TypeError:result.push不是函数

时间:2015-11-20 19:38:18

标签: javascript arrays

我有这两个函数,都生成一个从开始到结束的范围,其中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;我不明白为什么会发生这种情况,因为我将数组作为辅助函数的第一个参数传递,并在辅助函数中使用正确的参数名来引用它。它是一个数组,为什么我会收到此错误?

2 个答案:

答案 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);
}