function get(obj, path) {
if (typeof obj !== "object" && typeof obj !== "function") {
return undefined;
}
if (typeof path !== "string") {
return undefined;
}
var props = path.match(/(?<=["']).+(?=['"])|[\w]+/g) || [];
for (var i = 0; i < props.length; i++) {
var prop = props[i];
if (!obj.hasOwnProperty(prop)) {
return undefined;
}
obj = obj[prop];
}
return obj;
}
get()
get(null)
get(undefined)
get("")
get(0)
get(false)
get({ a: "b" }, null)
get({ a: "b" }, undefined)
get({ a: "b" }, 0)
get({ a: "b" }, false)
get({ a: "b" }, {})
get({ a: "b" }, "aa.b")
get({ a: "b" }, "a.b.c")
get({ a: "b" }, "a")
get({ a: { b: "c" } }, "a.b")
get({ "a.b": "c" }, "['a.b']")
get([{ a: "b" }], "[0]")
get({ a: [{ b: "c" }] }, "a[0]")
get({ a: [{ b: "c" }] }, "a[0].b")
get({ a: { b: ["c"] } }, "a.b[0]")
get({ a: { b: { c: { d: "e" } } } }, "a")
get({ a: { b: { c: { d: "e" } } } }, "a.b")
get({ a: { b: { c: { d: "e" } } } }, "a.b.c")
const a = () => {};
a.b = { c: "d" };
get(a, "")
const a = () => {};
a.b = { c: "d" };
get(a, "b")
const a = () => {};
a.b = { c: "d" };
get(a, "b.c")