JSFiddle - React, Tailwind, and code Playground

by favo

HTML

<pre id="debug"></pre>

JavaScript

Object.getByString = function (o, s) {
    s = s.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
    s = s.replace(/^\./, ''); // strip a leading dot
    var a = s.split('.');
    var k;
    while (k = a.shift()) {
        if (k in o) {
            o = o[k];
        } else {
            return;
        }
    }
    return o;
}

Object.setByString = function (o, s, n) {
    s = s.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
    s = s.replace(/^\./, ''); // strip a leading dot
    var a = s.split('.');
    var k;
    var h = [o];
    while (k = a.shift()) {
        if (k in o) {
            h.push(o = o[k]);
        } else {
            return o;
        }
    }
    var v;
    var pv = n;
    h.pop();
    a = s.split('.');
    while (v = h.pop()) {
        v[a.pop()] = pv;
        o = pv = v;
    }
    return o;
}

Object.prototype.getByString = function (s) {
    return Object.getByString(this, s);
}


Object.prototype.setByString = function (s, n) {
    return Object.setByString(this, s, n);
}


var someObject = {
    'part1' : {
        'name': 'Part 1',
        'size': '20',
        'qty' : '50'
    },
    'part2' : {
        'name': 'Part 2',
        'size': '15',
        'qty' : '60'
    },
    'part3' : [
        {
            'name': 'Part 3A',
            'size': '10',
            'qty' : '20',
            'details' : {
                'key' : 'sub key'
            }
        }, {
            'name': 'Part 3B',
            'size': '5',
            'qty' : '20'
        }, {
            'name': 'Part 3C',
            'size': '7.5',
            'qty' : '20'
        }
    ]
};


$('#debug').append("value for part1.name is " + someObject.getByString('part1.name') + "\n");
$('#debug').append("value for part2.qty is " + someObject.getByString('part2.qty') + "\n");
$('#debug').append("value for part3[0].details.key is " + someObject.getByString('part3[0].details.key') + "\n");
$('#debug').append("object at part3[0] ",...