2016-11-24 86 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; 
    } 
}