function optionalAccess(obj, path, def) { const propNames = path.replace(/\]|\)/, "").split(/\.|\[|\(/); return propNames.reduce((acc, prop) => acc[prop] || def, obj); } const obj = { items: [ { hello: "Hello" } ] }; console.log(optionalAccess(obj, "items[0].hello", "def")); // => Hello console.log(optionalAccess(obj, "items[0].he", "def")); // => def