2

我试图让它工作:

function whatever(arg) {
  eval(arg) + '_group' = [];
}

目的是只有 1 个函数,而不是三个具有基本相同内容但具有不同变量名称的函数。

最后,我想要类似的东西:

a_group = [];
b_group = [];

这样做,我得到了错误:

ReferenceError: Invalid left-hand side in assignment

编辑

这是我正在尝试实现的原始功能。但它不会起作用。

function collect_all_values_for(field_name) {

    switch(field_name) {
        case 'states':
            use = 'state';
        case 'cities':
            use = 'city';
        case 'neighborhoods':
            use = 'neighborhood';        
    }

    window[field_name + '_group'] = [];

    n_fields = $('[id^=' + use + '_]').length-1;

    i = 0;
    field_value = 0;
    for (i = 0; i<= n_fields; i++) {

        if (i == 0) {
            field_value = $('#' + use).val(); 
        }else{
            field_value = $('#' + use + '_id' + i).val();
        }

        //states_group.push(field_value);
        window[field_name + '_group'].push(field_value);
    }

}

查看控制台输出:

states_group
[undefined, undefined, undefined]

然后我应该可以将其称为:

collect_all_values_for('states');
collect_all_values_for('cities');
collect_all_values_for('neighborhoods');

提前致谢。

4

3 回答 3

3
function whatever(arg) {
  window[arg + '_group'] = [];
}

这会将a_group,设置b_group为全局变量。

要访问这些变量,请使用:

window['a_group'], window['b_group']等等。

根据编辑

在你的switch你应该使用break;.

switch(field_name) {
    case 'states':
        use = 'state';
        break;
    case 'cities':
        use = 'city';
        break;
    case 'neighborhoods':
        use = 'neighborhood';   
        break;     
}

使用本地对象(没有窗口对象)和更好

var myObject = {};

function whatever(arg) {
  myObject[arg + '_group'] = [];
  // output: { 'a_group' : [], 'b_group' : [], .. }
}

// to set value
myObject[arg + '_group'].push( some_value );

// to get value
myObject[arg + '_group'];
于 2012-09-14T18:50:02.293 回答
1

虽然你真的不应该使用 eval 这应该有帮助

eval(arg + '_group') = [];

于 2012-09-14T18:50:14.370 回答
1

只是为了增加@theparadox 的答案。
我更喜欢使用以下方式进行切换。

var options =  {
    'states' : 'state',
    'cities': 'city',
    'neighborhoods': 'neighborhood'    
};
use = options[field_name];

演示

或者,如果您只想删除最后一个字母,您可以这样做。

use = field_name.slice(0,-1);

演示

于 2012-09-14T19:38:34.503 回答