JSFiddle - React, Tailwind, and code Playground

JavaScript

var obj = {
    prop: 1,
    arr: [
        { id: 1, name: "larry" },    
        { id: 2, name: "curly" },
        { id: 3, name: "moe" }
    ],
    complex: {
        place: {
            greeting: "hello world"   
        }
    }
};

function flatten(obj){
 var root = {};
 (function tree(obj, index){
   var suffix = toString.call(obj) == "[object Array]" ? "]" : "";
   for(var key in obj){
    if(!obj.hasOwnProperty(key))continue;
    root[index+key+suffix] = obj[key];
    if( toString.call(obj[key]) == "[object Array]" )tree(obj[key],index+key+suffix+"[");
    if( toString.call(obj[key]) == "[object Object]" )tree(obj[key],index+key+suffix+".");   
   }
 })(obj,"");
 return root;
}
   
var flat = flatten(obj);
console.log(flat);
var property = "arr[2].name";
alert(flat[property]);