Javascript Iteration issue - variable variable -
not expert on old js here goes
i have
store1.baseparams.competition = null; store2.baseparams.competition = null; store3.baseparams.competition = null;
what want is
for (i=1; 1<=3; 1++) { store + +.baseparams.competition = null; }
hope makes sense want - possible
basically make variable / object adding it
cheers
one way accomplish via eval()
- (usually bad idea)
for (var i=1; i<=3; i++) { eval("store" + + ".baseparams.competition = null;"); }
another, more complex relatively efficient way create function gives ability mutate arbitrarily deep object hierarchies dynamically @ run-time. here's 1 such function:
/* usage: nested objects: nested_object_setter(object, ['property', 'propertyofpreviousproperty'], somevalue); top-level objects: nested_object_setter(object, 'property', somevalue); */ function dynamic_property_setter_base(obj, property, value, strict) { var shouldperformmutation = !strict || (strict && obj.hasownproperty(property)); if(shouldperformmutation) { obj[property] = value; } return value; } function dynamic_property_setter(obj, property, value) { return dynamic_property_setter_base(obj, property, value, false); } function nested_object_setter(obj, keys, value) { var isarray = function(o) { return object.prototype.tostring.call(o) === '[object array]'; }; //support nested keys. if(isarray(keys)) { if(keys.length === 1) { return nested_object_setter(obj, keys[0], value); } var o = obj[keys[0]]; for(var = 1, j = keys.length - 1; < j; i++) o = o[keys[i]]; return dynamic_property_setter(o, keys[keys.length - 1], value); } if(keys != null && object.prototype.tostring.call(keys) === '[object string]' && keys.length > 0) { return dynamic_property_setter(obj, keys, value); } return null; }
your code this:
for(var = 1; <= 3; i++) nested_object_setter(this, ['store' + i, 'baseparams', 'competition'], null);
here's example, running in js console:
> var x = {'y': {'a1': 'b'}}; > var = 1; > nested_object_setter(this, ['x','y','a' + i], "this \"a\""); > x.y.a1 "this "a""
another way it, imho simplest least extensible way:
this['store' + i].baseparams.competition = null;
Comments
Post a Comment