[英]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
返回1
, daycode.length
返回3
,因為值daycode
是wv0
和長度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.