尝试以交错的形式配对数组值。
例如,在完成该功能后,我正在寻找new_arr
['team1', 'team8', 'team2', 'team7', 'team3', 'team6', 'team4', 'team5']
知道为什么我收到调用堆栈错误?我在某处错过了内存泄漏吗?
var arr = ['team1', 'team2', 'team3', 'team4', 'team5', 'team6', 'team7', 'team8'];
var new_arr = [];
function staggered(arr, new_arr, min = null, max = null) {
for (var i=0, j=arr.length-1; i < arr.length / 2; i++, j--) {
if(typeof min === "null") { min = i;}
if(typeof max === "null") { max = j;}
new_arr.push(new_arr, arr[min], arr[max]);
return staggered(arr, new_arr, i + 1, j - 1);
}
}
console.log(staggered(arr, new_arr));
答案 0 :(得分:1)
您的函数遇到递归限制,因为递归发生的for
循环始终被调用,因为它始终从0
运行到arr.length / 2
,并且但是当你递归时,arr
总是保持相同的长度。
那就是说,实际上没有必要递归地写这个函数:
function staggered(arr) {
var res = [];
for (var i = 0, j = arr.length; i < j; ) {
res.push(arr[i++]);
res.push(arr[--j]);
}
return res;
}
给定一个奇数大小的输入数组,最后一个配对将中间条目与自身组合(又名&#34; by&#34;)。
答案 1 :(得分:0)
一种稍微简单的递归方法,没有for
循环:
function staggered(arr, new_arr, i) {
if (arr.length === 0) return new_arr;
if (!i) arr = arr.slice(0);
new_arr = new_arr || [];
new_arr.push(arr.shift(), arr.pop());
return staggered(arr, new_arr, 1);
}