jsan
Version:
handle circular references when stringifying and parsing
24 lines (21 loc) • 605 B
JavaScript
module.exports = pathGetter;
function pathGetter(obj, path) {
if (path !== '$') {
var paths = getPaths(path);
for (var i = 0; i < paths.length; i++) {
path = paths[i].toString().replace(/\\"/g, '"');
if (typeof obj[path] === 'undefined' && i !== paths.length - 1) continue;
obj = obj[path];
}
}
return obj;
}
function getPaths(pathString) {
var regex = /(?:\.(\w+))|(?:\[(\d+)\])|(?:\["((?:[^\\"]|\\.)*)"\])/g;
var matches = [];
var match;
while (match = regex.exec(pathString)) {
matches.push( match[1] || match[2] || match[3] );
}
return matches;
}