JSFiddle - React, Tailwind, and code Playground
JavaScript
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'
}, {
'name': 'Part 3B',
'size': '5',
'qty' : '20'
}, {
'name': 'Part 3C',
'size': '7.5',
'qty' : '20'
}
]
};
var result;
var part1name = "part1.name";
var part2quantity = "part2.qty";
var part3name1 = "part3.0.name";
// Alnitak
Object.byString = function(o, s) {
s = s.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
s = s.replace(/^\./, ''); // strip a leading dot
var a = s.split('.');
while (a.length) {
var n = a.shift();
if (n in o) {
o = o[n];
} else {
return;
}
}
return o;
}
console.time('Object.byString');
console.log(Object.byString(someObject, part1name));
console.log(Object.byString(someObject, part2quantity));
console.log(Object.byString(someObject, part3name1));
console.timeEnd('Object.byString');
// Felix King
function getProperty(obj, prop) {
var parts = prop.split('.'),
last = parts.pop(),
l = parts.length,
i = 1,
current = parts[0];
while((obj = obj[current]) && i < l) {
current = parts[i];
i++;
}
if(obj) {
return obj[last];
}
}
console.time('getProperty');
console.log(getProperty(someObject, part1name));
console.log(getProperty(someObject, part2quantity));
console.log(getProperty(someObject, part3name1));
console.timeEnd('getProperty');
// Shanimal
function _eval(obj, path) {
try {
return eval("obj." + path);
} catch(e) {
return undefined;
}
}
console.time('eval');
console.log(_eval(someObject,...