var x = { a: 1, b: 'B', c: { x: "X", y: "Y", z: "Z" }, d: [{p:"P"},{q:"Q"},{r:"R"}] }; ["d", 1, "q"].reduce(function (prev, curr) { return prev[curr]; }, x); >>> "Q"
http://en.wikipedia.org/wiki/Trie
Also, Clojure has a nice functions called get-in and friends:
user=> (def x {:a 1 :b 'B' :c { :x "X" :y "Y" :z "Z" } :d [{:p "P"} {:q "Q"} {:r "R"}] }) #'user/x user=> (get-in x [:d 1 :q]) "Q" user=> (assoc-in x [:d 1 :q] "QQ") {:a 1, :c {:z "Z", :y "Y", :x "X"}, :b B', :d [{:p "P"} {:q "QQ"} {:r "R"}]}