Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将javascript数组转换为函数_Javascript_Arrays_Function - Fatal编程技术网

如何将javascript数组转换为函数

如何将javascript数组转换为函数,javascript,arrays,function,Javascript,Arrays,Function,我有一个任意值的数组。我编写了一个函数,将数组转换为返回原始值的函数数组,因此我将调用a3而不是调用[3] 这是我的代码,它不起作用。它给出了此错误无法调用未定义的方法“1” var numToFun = [1, 2, { foo: "bar" }]; var numToFunLength = numToFun.length; function transform(numTo) { for (var i = 0; i < numToFunLength; i++) {

我有一个任意值的数组。我编写了一个函数,将数组转换为返回原始值的函数数组,因此我将调用a3而不是调用[3]

这是我的代码,它不起作用。它给出了此错误
无法调用未定义的方法“1”

var numToFun = [1, 2, { foo: "bar" }];
var numToFunLength = numToFun.length;

function transform(numTo) {
    for (var i = 0; i < numToFunLength; i++) {
        (function(num){
            numTo.unshift(function() {
                return num;
            });
        }(numTo.pop())) 
    }
}

var b = transform(numToFun);

console.log(numToFun);
console.log(b[1]());​
return numTo;
var numToFun=[1,2,{foo:bar}];
var numToFunLength=numToFun.length;
函数变换(numTo){
对于(var i=0;i
您的函数
转换
不会返回任何内容。这就是
b
未定义的原因

var numToFun = [1, 2, { foo: "bar" }];
var numToFunLength = numToFun.length;

function transform(numTo) {
    for (var i = 0; i < numToFunLength; i++) {
        (function(num){
            numTo.unshift(function() {
                return num;
            });
        }(numTo.pop())) 
    }
}

var b = transform(numToFun);

console.log(numToFun);
console.log(b[1]());​
return numTo;


另一方面,数组将作为引用传递给函数,因此原始数组将被更改。如果您不返回任何内容,这不是问题,只需省略
var b=transform(numToFun)行,只需编写
转换(numToFun)

您的转换函数不会返回任何内容。所以b是未定义的

在我写我的时候,其他人已经回答了你的问题,但我还是会发布它-如果没有所有这些弹出和取消移动,这可能会更容易理解:

function transform(numTo) {
    var r = [];
    for (var i = 0; i < numTo.length; i++) {
        r[i] = (function (v) {
            return function() {
                return v;
            }
        }(numTo[i]));
    }
    return r;
}
我喜欢这种语法,因为它使您希望将一个值数组映射到一个返回这些值的函数数组更加明确


请参阅。

谢谢,它正在工作。你能告诉我这是实现我想要实现的目标的一个好方法吗?@al0neevenings嗯,看起来很有效。当然,这是一个棘手的方法:)。+1来自我,当然更简单更干净。甚至原始阵列也被保留下来!这样做有效吗?我的意思是说,它比我的溶液快吗?@al0ne-evenings:嗯,如果你问我的话,读起来肯定更快除此之外,我无法想象在任何用例中,这两种解决方案的速度差异都是显而易见的。我总是建议从最可读的方式编写代码,只考虑优化它的速度,当你对它进行配置,当它真正重要的时候。现在,当我考虑这个问题时,可能会有更优雅的解决方案,我可能会在几分钟内发布。