首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用自动执行的内部函数在JavaScript中执行数组复制功能

使用自动执行的内部函数在JavaScript中执行数组复制功能
EN

Stack Overflow用户
提问于 2014-03-27 18:33:06
回答 2查看 147关注 0票数 3

我试图在JavaScript中编写一个数组复制函数,该函数将一个数组和一个复制因子作为输入参数,并返回该复制数组。

像这样:

代码语言:javascript
复制
expect(replicate([2,3,4],2).toEqual([2,3,4,2,3,4]));

我试图通过一个递归调用的、自动执行的内部函数来完成这个任务,这个函数应该在完成后将所需的值返回给外部函数。

内部功能似乎工作正常:

代码语言:javascript
复制
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);

 };

但是当我调用外部函数时,它会返回未定义的

代码语言:javascript
复制
alert(replicate([2,3,4],2)); // returns undefined, not [2,3,4,2,3,4]

知道我可能在这里错过了什么吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-27 18:34:00

因为您没有返回replicateInner(--n)的结果,如下所示

代码语言:javascript
复制
return replicateInner(--n);

另外,当您将inputArray.slice(0)推到outputArray时,结果将如下所示

代码语言:javascript
复制
[ [ 2, 3, 4 ], [ 2, 3, 4 ] ]

您需要做的是像这样连接数组

代码语言:javascript
复制
outputArray = outputArray.concat(inputArray.slice(0));

通过此更改,输出将变为

代码语言:javascript
复制
[ 2, 3, 4, 2, 3, 4 ]
票数 4
EN

Stack Overflow用户

发布于 2014-03-27 19:11:21

很棒的问题。这里有一个简单的答案,它既有生命,也有递归。我们不需要到处传递任何东西,也不需要把任何东西传递给生命,因为它都在闭包范围内。

代码语言:javascript
复制
var replicate = function (inputArray, n) {
    var outputArray = [];
    (function replicateInner() {
        if (n > 0) {
            outputArray = outputArray.concat(inputArray.slice(0));
            --n;
            replicateInner()
        }
    })();
    return outputArray;
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22696267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档