簡體   English   中英

如何根據變量復制函數?

[英]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.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 ,因為值daycodewv0和長度wv0是三。 那我還能怎么做呢?

您可以做這樣的事情,我認為這是慣用的,並且不求助於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(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語句來簡化代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM