我试图在JavaScript中编写一个数组复制函数,该函数将一个数组和一个复制因子作为输入参数,并返回该复制数组。
像这样:
expect(replicate([2,3,4],2).toEqual([2,3,4,2,3,4]));我试图通过一个递归调用的、自动执行的内部函数来完成这个任务,这个函数应该在完成后将所需的值返回给外部函数。
内部功能似乎工作正常:
var replicate = function (inputArray, n) {
var outputArray = [];
return (function replicateInner(n) {
if (n > 0) {
outputArray.push(inputArray.slice(0));
replicateInner(--n)
} else {
alert('inner function returns: ' + outputArray);
//inner function returns: [2,3,4,2,3,4]
return outputArray;
}
})(n);
};但是当我调用外部函数时,它会返回未定义的
alert(replicate([2,3,4],2)); // returns undefined, not [2,3,4,2,3,4]知道我可能在这里错过了什么吗?谢谢!
发布于 2014-03-27 18:34:00
因为您没有返回replicateInner(--n)的结果,如下所示
return replicateInner(--n);另外,当您将inputArray.slice(0)推到outputArray时,结果将如下所示
[ [ 2, 3, 4 ], [ 2, 3, 4 ] ]您需要做的是像这样连接数组
outputArray = outputArray.concat(inputArray.slice(0));通过此更改,输出将变为
[ 2, 3, 4, 2, 3, 4 ]发布于 2014-03-27 19:11:21
很棒的问题。这里有一个简单的答案,它既有生命,也有递归。我们不需要到处传递任何东西,也不需要把任何东西传递给生命,因为它都在闭包范围内。
var replicate = function (inputArray, n) {
var outputArray = [];
(function replicateInner() {
if (n > 0) {
outputArray = outputArray.concat(inputArray.slice(0));
--n;
replicateInner()
}
})();
return outputArray;
};https://stackoverflow.com/questions/22696267
复制相似问题