我正在练习递归,并且我正在尝试构建一个扫描对的函数,并仅使用递归将它们放入自己的列表中(没有forEaches,循环等)。如果有一个奇数元素,你加零。这是我的代码和示例输入/输出。我唯一缺少的是如何在最后处理未定义的情况。我该如何处理?
function ownListPair(arr){
return arr.length < 2 ? [[arr[0], 0]] : [[arr[0], arr[1]]].concat(ownListPair(arr.slice(2)));
}
var arr = [2,7,8,3,1,4]
//should return [ [ 2, 7 ], [ 8, 3 ], [ 1, 4 ]]
console.log(ownListPair(arr))
//returns [ [ 2, 7 ], [ 8, 3 ], [ 1, 4 ], [ undefined, 0 ] ]
//how do I handle the undefined case? I tried a check for if the length is 1
and got "maximum call stack exceeded"...
还尝试检查arr [0]是否与第一次长度检查一起未定义,但也调用堆栈错误。
答案 0 :(得分:2)
您需要arr.length === 0
的案例。您可以通过多种方式撰写本文,其中一种方法是:
function ownListPair(arr){
if (arr.length === 0)
return arr;
else if(arr.length === 1)
return [[arr[0], 0]];
else
return [[arr[0], arr[1]]].concat(ownListPair(arr.slice(2)));
}
console.log(ownListPair([2,7,8,3,1,4]));
&#13;
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
&#13;