【问题标题】:How to push values into array using recursive function?如何使用递归函数将值推入数组?
【发布时间】:2021-06-01 23:27:03
【问题描述】:

我正在尝试通过递归函数将值推送到数组中,但我收到错误消息“未捕获的类型错误:Array.push() 不是函数”,尽管 push() 方法是常规数组方法。问题可能出在哪里?

let someArr = ['a', 'b', 'c'];
let someNum = 3;

let fillArr = (arr, num) => x = (num != 0) ? fillArr(arr.push(num), num -1) : arr;

console.log(fillArr(someArr, someNum))

// expected output: ['a', 'b', 'c', 3, 2, 1];
// actual output: Uncaught TypeError: arr.push is not a function

【问题讨论】:

  • 使用concat 而不是push
  • Array.push 返回一个 int,您在递归调用中将该 int 作为 arr 的参数传递。

标签: javascript arrays function recursion


【解决方案1】:

逗号运算符经常被忽略;它可以提供一个不错的逃生舱口:

const fillArr =
  (arr, num) =>
    (num === 0
      ? arr
      : fillArr((arr.push(num), arr), num - 1));
//..............^^^^^^^^^^^^^^^^^^^^

fillArr(['a', 'b', 'c'], 3)
//=> ["a", "b", "c", 3, 2, 1]

但是,您不应该使用 Array#push 处理原始数组,因为它会改变它(除非这是您的意图!)

const arr = ['a', 'b', 'c'];
fillArr(arr, 3);
arr;
//=> ["a", "b", "c", 3, 2, 1] Oops!

您应该使用新数组:

const arr = ['a', 'b', 'c'];
const fillArr =
  (arr, num, nums = []) =>
    (num === 0
      ? arr.concat(nums)
      : fillArr(arr, num - 1, (nums.push(num), nums)));

fillArr(arr, 3);
//=> ["a", "b", "c", 3, 2, 1]
arr;
//=> ["a", "b", "c"]

【讨论】:

    【解决方案2】:

    @deceze 先生所说的是正确的。如果你还想这样做.. 做类似的事情

    let fillArr = (arr, num) => x = (num != 0) ? fillArr(arr, num -1, arr.push(num)) : arr;
    

    fillArr 将收到 someArr got num push,最后一个参数将被忽略

    【讨论】:

      猜你喜欢
      • 2016-06-30
      • 2021-09-04
      • 2021-11-05
      • 1970-01-01
      • 2011-10-19
      • 2021-12-25
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多