我正在尝试创建一个函数,以递归方式将每个数组元素放入其自己的数组中。
我认为我的基本情况是正确的,但我的递归调用似乎不起作用。有什么见解吗?
function ownList(arr){
if (arr.length === 1) {
arr[0] = [arr[0]];
return;
} else {
return arr[0].concat(ownList(arr.slice(1)));
}
}
var arr = [1,2,3]
console.log(ownList(arr))// returns []
//should return [[1],[2],[3]]
在这里,我尝试将每一对放入它自己的列表中(仅限递归)。下面的代码是正确的(更新)
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)));
}
// var arr = [3,6,8,1,5]
var arr = [2,7,8,3,1,4]
//returns [ [ 2, 7 ], [ 8, 3 ], [ 1, 4 ]]
console.log(ownListPair(arr))
最佳答案
我更喜欢这个解决方案有几个原因:
function ownList(a) {
return a.length == 0
? []
: [[a[0]]].concat(ownList(a.slice(1)))
}
- 更短、更简洁
- 它也适用于空数组
- 实际换行仅在最后一行发生一次。按照其他人的建议,单独处理
length == 1
是没有必要的。
关于javascript - 递归地将数组元素放入自己的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32460328/