let data = [1, 2, 3]
let sorted = []
let push = function(i) {
while(i<data.length) {
sorted.push(data[i])
push(i + 1)
}
}
push(0)
嗨,
我正在编写一些基本的递归,但似乎没有退出。很抱歉这个基本问题,但我希望有人能解释一下。
预期的行为:模仿一个for循环-遍历数组并推送到新数组。到达i == data.length
实际行为:先运行0、1、2,然后运行2,直到堆栈溢出。
Codefiddle:https://jsfiddle.net/t579jbog/
答案 0 :(得分:1)
您应该使用if
而不是while
,并确保在递归调用中使用其他值i
。
let data = [1, 2, 3]
let sorted = []
let push = function(i) {
if (i < data.length) {
sorted.push(data[i]);
push(i + 1);
}
}
push(0);
console.log(sorted);
答案 1 :(得分:0)
您可以使用索引的shift()intead(shift()删除数组上的第一项并返回值-可以将其推入排序后的数组中。
然后简单地检查数组长度是否> 0,是否为0-将其传递给同一函数以重做该函数,直到数组为空。
我正在安慰已排序的数组,以证明它每次都在获取值。
let data = [1, 2, 3]
let sorted = []
let push = function(arr) {
sorted.push(arr.shift())
console.log(sorted);
if(arr.length > 0) {
push(arr);
}
}
push(data);