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

Popular posts from this blog

apache - Add omitted ? to URLs -

redirect - bbPress Forum - rewrite to wwww.mysite prohibits login -

php - How can I stop spam on my custom forum/blog? -