2016-11-24 141 views
1

我有一個數組。假設陣列是:使用變量級聯調用函數

var group10 = ['as', '323fsd', 'asdasd', '43ssdf']; 

我將數組傳遞給一個函數以及一個數組元素,以便從數組中刪除它。如果刪除,則返回true,否則返回true。

function removeElem(element, array){ 
    var index = array.indexOf(element); 
    if (index > -1) { 
     array.splice(index, 1); 
     return true; 
    } 
} 

棘手的部分是,我是從另一個函數動態獲取數值變量和它的返回要麼1 or 2 or .......... 10

如果返回1,那麼我想對付group1。如果它返回2,我想要處理group2

由於名稱group是恆定的,我將它與它返回的變量連接並將整個函數傳遞給函數。但是,不幸的是,一個字符串正在通過。

var arr = 'group'+10; 

if(removeElem('323fsd', arr)) { 
    console.log(group10); 
} else { 
    console.log('fail'); 
} 

那麼,它是如何能夠動態地串聯和傳遞數組作爲一個整體到函數?

+0

'removeElem(「323fsd」,窗口[ARR])' –

+1

嘗試的eval(ARR),因此它可以被視爲一個變量不是[如何使用字符串作爲變量名的字符串 –

+1

可能的複製在Javascript?](http://stackoverflow.com/questions/6160146/how-to-use-a-string-as-a-variable-name-in-javascript) – Mahi

回答

2

eval()是一種可能的解決方案,因此該變量將作爲變量進行處理,如果存在相同名稱

var group10 = ['as', '323fsd', 'asdasd', '43ssdf']; 
var arr = 'group' + 10; 

if(removeElem('323fsd', eval(arr))) { 
    console.log(group10); 
} else { 
    console.log('fail'); 
} 
+0

我建議你不要使用eval就像邪惡。這將使你的代碼地獄 – Mahi

+0

沒有先生,這就是爲什麼js已經評估它是這樣的場合,最重要的部分是,eval沒有得到它的param從用戶輸入..有另一種選擇是使用窗口[varname]但它具有引入全局變量的副作用,這可能不是想要的。 –

+0

http://stackoverflow.com/questions/86513/why-is-using-the-javascript-eval-function-a-bad-idea – Mahi

0

嘗試這種情況:

聲明這樣array = window[array];。因爲字符串數組不允許直接轉換成函數或數組。

var group10 = ['as', '323fsd', 'asdasd', '43ssdf']; 
 
function removeElem(element, array){ 
 
    array = window[array]; 
 
var index = array.indexOf(element); 
 
    
 
    if (index > -1) { 
 
        array.splice(index, 1); 
 
        return true; 
 
       } 
 
} 
 

 
var arr = 'group'+10; 
 
if(removeElem('323fsd', arr)){ 
 
     console.log(group10); 
 
    }else{ 
 
     console.log('fail'); 
 
    }

0

一種使用陣列與所述變量的名稱(假定被預先聲明的所有變量)的提案。

function removeElem(element, arrayNo) { 
    var groups = [group1, group2, group3, group4, group5, group6, group7, group8, group9, group10], 
     index = groups[arrayNo - 1)].indexOf(element); 

    if (index > -1) { 
     groups[arrayNo - 1)].splice(index, 1); 
     return true; 
    } 
}