如何根据变量复制函数?

时间:2015-10-18 17:31:49

标签: javascript

对于模糊的标题感到抱歉 - 我不确定我能描述的其他内容。

以下是这种情况:我有大量的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返回1daycode.length也会返回3,因为daycode的值为wv0wv0的长度为nano ~/.profile 1}}是三。那怎么办呢?

2 个答案:

答案 0 :(得分:0)

你可以做这样的事情,我认为这是惯用的,而不是诉诸于eval。

var f = function(entry, index){ ... };
var mappings = { 0: wv0, 1: wv1...};
var wv = today.getDate();
mappings[wv].forEach(f);

将日期结果显式映射到您想要迭代的对象。

答案 1 :(得分:-1)

您可以在变量中声明一个函数并将其传递给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语句来简化代码。