JavaScript将数组转换为函数数组
JavaScript converting an array to array of functions
你好,我正在处理一个问题,该问题要求我将一组数字数组更改为一个数组,该数组将原始数字作为函数返回。因此,我们得到了a2的返回,而不是a[2]。
我不想要答案,我只需要一个提示。我知道我可以循环遍历数组并使用.pop()来获得数组的最后一个值,但我不知道如何将其转换为函数。有什么提示吗?
var numToFun = [1, 2, 3];
var numToFunLength = numToFun.length;
for (var i = 0; i < numToFunLength; i++) {
(function(num){
numToFun.unshift(function() {
return num;
});
}(numToFun.pop()))
}
演示
基本上,它从最后一个数字中弹出一个数字,用返回的数字构建一个函数,然后放回数组的第一个。在一个完整的周期之后,所有这些都是函数。
问题是:这是如何工作的,由你来研究
为什么循环看起来不像直接的弹出取消:
for (var i = 0; i < numToFunLength; i++) {
numToFun.unshift(function() { //put into first a function
return numToFun.pop() //that returns a number
});
}
以及我为什么这么做:(提示:性能)
var numToFunLength = numToFun.length;
这里有三个重要步骤:
从数组中提取数值。在具有
i
迭代器的循环中,它可能看起来像这样:var num = numArray[i];
这一点很重要,因为
i
将不会保留创建新函数时的值——一旦for
循环完成,它将以最后一个值结束。函数本身可能看起来像这样:function() { return num; }
不再引用
i
,这很重要——为了更好地理解,请阅读关于闭包的内容。最后一步是将新函数添加到所需的函数数组中。
你完了!
编辑:请参阅其他人的答案,以获得如何正确执行此操作的良好解释,我也会通过修复我的答案
正如其他人所指出的,javascript中许多人(显然包括我自己)难以解决的棘手问题之一是,javascript中的范围变量与许多其他语言不同;作用域几乎完全由函数定义,而不是像java/C那样由for循环的{}块定义
因此,在下面你可以看到(以及在这里的其他答案中)作用域函数可以帮助解决这样的问题。
var numArray = [12, 33, 55];
var funcArray = [];
var numArrLength = numArray.length; // Don't do this in for loop to avoid the check multiple times
for(var j=0; j < numArrLength; j++) {
var scopeMe = function() {
var numToReturn = numArray[j];
console.log('now loading... ' + numToReturn);
var newFunc = function() {
return numToReturn;
};
return newFunc;
}();
funcArray.push(scopeMe);
};
console.log('now me');
console.log(funcArray);
console.log(funcArray[0]());
console.log(funcArray[1]());
console.log(funcArray[2]());
console.log(funcArray[1]()); // To ensure it's repeatable
在下面编辑我以前的错误答案
你想做的是类似的事情
var funcArray = [];
for(...) {
var newFunc = function() {
return numArray.pop();
}
funcArray.push(newFunc);
}
这里的关键是javascript中的函数可以被命名为变量,并按如下方式传递:)
- 数组函数不适用于从元素文本创建的JavaScript数组
- 如何在javascript中求解pack数组函数
- 制作一个javascript的数组函数
- 获取元素的位置并创建它的数组函数
- 茉莉花中的 SpyOn javascript 数组函数
- 自定义数组函数不接受参数
- 使用原型的自定义数组函数.新的 MyArray(1,2,3,4) 不工作
- Java 脚本随机化数组函数
- 在 Restangular 集合上使用 lodash 数组函数
- 比较数组函数返回未定义
- Javascript中嵌套for循环与数组函数的性能
- 多维数组函数在JS中不起作用
- Javascript数组函数有我看不到的错误
- 数组函数外的javascript
- 在数组/函数中循环时使用换行符
- 拼接javascript数组函数获胜't删除项目
- 为什么不'这个js数组函数不能工作
- 如何在我自己的数组原型函数中使用数组函数
- 在javascript中定义数组函数
- Jquery动态树数组函数