2

私はこれを機能させようとしています:

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

目的は、基本的に同じ内容で変数名が異なる 3 つの関数を使用する代わりに、関数を 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_groupb_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

@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 に答える
1

あなたは本当に eval を使うべきではありませんが、これは役立つはずです

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

于 2012-09-14T18:50:14.370 に答える