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] ",...