Search code examples
javascriptobject

In javascript how can I dynamically get a nested property of an object


var arr = { foo : 1, bar: { baz : 2 }, bee : 3 }

function getter(variable) {
  return arr[variable];
}

If I want 'foo' vs 'bee' I can just do arr[variable] - that's easy, and the function does that.

But what if I want to get arr.bar.baz AKA arr[bar][baz]?

What can I pass to the getter function that will let me do that, (and of course also let me get non-nested properties using the same function).

I tried getter('bar.baz') and getter('[bar][baz]') but those didn't work.

I suppose I can parse for dots or brackets (like here: In javascript, test for property deeply nested in object graph?). Is there a cleaner way? (Besides eval of course.)

Especially because I need to get the deeply set properly many many times in a loop for a bunch of array elements.


Solution

  • How about change the getter function signature as getter('bar', 'baz') instead

    function getter() {
      var v = arr;
      for(var i=0; i< arguments.length; i++) {
        if(!v) return null;
        v = v[arguments[i]];
      }
      return v;
    }
    

    ps. didn't test, but you get the idea ;)