Skip to content

Instantly share code, notes, and snippets.

@sergueyarellano
Last active June 23, 2016 08:04
Show Gist options
  • Save sergueyarellano/519e6ab26fb0fc965a0599643534137e to your computer and use it in GitHub Desktop.
Save sergueyarellano/519e6ab26fb0fc965a0599643534137e to your computer and use it in GitHub Desktop.
function _get(parent, nested) {
return typeof nested === 'string' ?
(typeof parent === 'object' &&
nested
.split(/[\.\["'\]]/)
.filter(Boolean)
.reduce(function(acc, current) {
return acc && acc[current]
}, parent)) :
parent;
}
var ns = {a:{b:{c:0}}};
console.log('get(ns, "")',_get(ns, '')) // Object {a: Object}
console.log("get(ns, 'a.b.')", _get(ns, 'a.b.')) // Object {c: 0}
console.log("get(ns, 'a.b.d')", _get(ns, 'a.b.d')) // undefined
console.log("get(ns, 'a.b.c')", _get(ns, 'a.b.c')) // 0
console.log("get(ns, 'u.b.c')", _get(ns, 'u.b.c')) // undefined
console.log("get(ns, 'a['b'].c')", _get(ns, 'a["b"].c')) // 0
console.log("get(ns, 'a.b['c']')", _get(ns, 'a.b["c"]')) // 0
console.log("get(ns, 'a['b']['c']')", _get(ns, 'a["b"]["c"]')) // 0
console.log("get(ns, 'a.b['forgery']')", _get(ns, 'a.b["forgery"]')) // undefined
console.log("get(ns, 2)",_get(ns, 2)) // Object {a: Object}
console.log("get(ns, function(){})", _get(ns, function(){})) // Object {a: Object}
console.log("get(ns)", _get(ns)) // Object {a: Object}
console.log("get('')", _get('')) // ""
console.log("get(false)", _get(false)) // false
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment