如何根据变量来复制函数
How can I replicate functions depending on a variable?
很抱歉,我不知道我还能怎么描述。
场景如下:我有大量的if
语句试图做类似下面代码的事情:
var wv == today.getDate();
if(wv == 0){
wv0.forEach(function(entry, index)...
if(wv == 1){
wv1.forEach(function(entry, index)...
if(wv == 2){
wv2.forEach(function(entry, index)...
问题是wvX.forEach
之后的所有内容对于每个代码块都是相同的。因此,我知道它可以被浓缩,但我不知道如何做到这一点。
我所尝试做的是定义一个新的变量,它会给我wvX
数字取决于它是:
var daycode = 'wv' + getDate();
现在它给了我(所以今天,在星期天,它将返回wv0
,但是当我尝试像这样压缩上面的内容时:
if (wv == 0)
daycode.forEach(function(entry, index)...
也不行。我知道这只适用于wv == 0
或周日,但它仍然不起作用。然而,
if (wv == 0)
wv0.forEach(function(entry, index)...
仍然可以工作,即使它和上面的代码块是一样的,就像现在的daycode = wv0
。
编辑:所以我刚刚意识到一些事情。这可能是因为daycode
被视为一个变量。例如,即使wv0.length
返回1
, daycode.length
返回3
,因为daycode
的值是wv0
, wv0
的长度是3。那我还能怎么做呢?
您可以这样做,我认为这是习惯用法,并且不诉诸eval。
var f = function(entry, index){ ... };
var mappings = { 0: wv0, 1: wv1...};
var wv = today.getDate();
mappings[wv].forEach(f);
显式地将日期结果映射到要迭代的对象。
可以在变量中声明函数并将其传递给forEach方法。
var doThis = function(entry, index {
// Do something
}
if (wx == 0) {
wx3.forEach(doThis)
}
这是非常不安全的方法,确保你知道你在做什么。使用eval方法。
eval(fname)(arg1, arg2);
假设你有这样的声明:
var arr = [1,4,5,6]
可以使用eval:
eval('arr')
它会返回[1,4,5,6]
,即使你真的在传递一个字符串
所以,你可以创建一个函数,它接受与你正在迭代的数组相关联的字符串参数。
var iterate = function(arrName) {
var arr = eval('arrName');
arr.forEach(......)
对于if语句,也许可以考虑使用switch语句来简化代码。
相关文章:
- 在Meteor中如何将数据从函数内部复制到其他模板
- Javascript函数 - 通过引用复制,但这里发生了什么
- 从表单字段复制数据并将其放在echo语句中,所有这些都在$xml=simplexmlload_file函数中
- 我想放一个JS函数,它适用于列表的所有元素,但我可以't将其复制到每个元素中
- jquery砖石是否复制imagesLoaded函数
- javascript复制一个用于函数的变量
- 如何将.show()更改为.thoggle()而不复制函数中的项(如何重构)
- 复制不带属性的函数引用
- 如何避免在JavaScript函数中对函数进行浅层复制
- 在原型.js中复制构造函数
- jQuery:使用变量 ID 复制函数输出
- 由 Object.Assign() 函数生成的复制对象具有副作用
- 如何复制(新实例)闭包函数
- 用于复制可能影响原始数组的数组的函数
- 复制行不适用于其他 ajax 函数
- 历史记录 api 状态更改函数脚本在每次发生更改时复制函数调用
- 复制函数内部的数组
- 如何根据变量来复制函数
- JavaScript中使用自执行内部函数的数组复制函数
- 复制函数只对某些输入有效