Javascript 如何使用递归函数将值推入数组?
我试图通过递归函数将值推入数组,但得到错误消息“uncaughttypeerror:array.push()不是函数”,尽管push()方法是常规数组方法。问题出在哪里Javascript 如何使用递归函数将值推入数组?,javascript,arrays,function,recursion,Javascript,Arrays,Function,Recursion,我试图通过递归函数将值推入数组,但得到错误消息“uncaughttypeerror: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,
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
逗号运算符经常被忽略;它可以提供一个很好的逃生舱:
const fillArr=
(arr,num)=>
(num==0
?arr
:fillArr((arr.push(num),arr,num-1));
//..............^^^^^^^^^^^^^^^^^^^^
填充(['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]哦!
相反,您应该使用新阵列:
const arr=['a','b','c'];
常数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”]
德克塞先生所说的是正确的。如果你还想那样做。。
做点像
let fillArr = (arr, num) => x = (num != 0) ? fillArr(arr, num -1, arr.push(num)) : arr;
fillArr将接收someArr get num push,最后一个参数将被忽略使用
concat
而不是push
数组。push
返回一个int,并且在递归调用中将该int作为arr
的参数传递。