JavaScript中使用自执行内部函数的数组复制函数
Array Replication Function in JavaScript using self-executing inner function
我正在尝试用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);
};
但是当我调用外部函数时,它返回undefined
alert(replicate([2,3,4],2)); // returns undefined, not [2,3,4,2,3,4]
你知道我遗漏了什么吗?谢谢!
因为您没有返回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 ]
好问题。下面是一个简化的答案,它同时具有IIFE和递归。我们不需要传递任何东西,也不需要传递任何东西给IIFE,因为它都在闭包范围内。
var replicate = function (inputArray, n) {
var outputArray = [];
(function replicateInner() {
if (n > 0) {
outputArray = outputArray.concat(inputArray.slice(0));
--n;
replicateInner()
}
})();
return outputArray;
};
相关文章:
- d3:用更多维数组复制路径
- $.get-json数组复制
- 用javascript将一个对象数组复制到另一个数组中(深度复制)
- 将数组复制到另一个数组中,并将缺少的字段替换为 null
- 仅将对象的 1 个属性从对象数组复制到新数组
- 具有嵌套数组的绝对无引用的数组复制
- 如何将数组复制到数组
- 将特定对象(根据给定条件)从对象数组复制到angularJS中的另一个数组中
- Javascript数组复制,concat和slice,哪个更好
- 将数组复制到“;这个“;变量(创建一个类似数组的对象)
- 角度,数组复制太迟
- Node.js添加相对路径字符串到数组复制斜杠
- 在AngularJS中将值从对象数组复制到输入字段
- 将2D数组复制到另一个工作表
- 在JQuery中,将一个对象数组复制到另一个数组是它的引用类型
- 如何将函数返回的数组复制到JavaScript中的另一个数组中
- 这是JS数组复制在没有循环展开的情况下最快的速度吗?
- 将数组复制到变量,同时排除项-性能
- 将PHP数组复制到javascript数组中
- JavaScript中使用自执行内部函数的数组复制函数