如何为动态创建的变量创建和赋值?
我试图让这个工作:
function whatever(arg) { eval(arg) + '_group' = []; }
目的是只有一个函数而不是三个具有基本相同的内容但具有不同的变量名称。
最后我希望有类似的东西:
a_group = []; b_group = [];
这样做,我收到错误:
ReferenceError: Invalid left-hand side in assignment
编辑
这是我正在努力工作的原始function。 但它不会起作用。
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');
提前致谢。
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; }
使用本地Object (没有window对象)更好
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'];
虽然你真的不应该使用eval这应该有所帮助
eval(arg + '_group') = [];
只是为了增加@ theparadox的答案。
我更喜欢使用以下方式进行切换。
var options = { 'states' : 'state', 'cities': 'city', 'neighborhoods': 'neighborhood' }; use = options[field_name];
演示
或者,如果您只想删除最后一个字母,则可以执行此操作。
use = field_name.slice(0,-1);
演示