49 lines
1.2 KiB
JavaScript
49 lines
1.2 KiB
JavaScript
// turns dot notation strings into keys of root
|
|
// argument formats:
|
|
// 157, object -> 157
|
|
// "some.number", object -> object.some.number
|
|
// "some.function", object -> object.some.function()
|
|
// "some.function arg1 arg2", object -> object.some.function(arg1, arg2)
|
|
pop = function(input, root){
|
|
|
|
if(typeof(input) === "string"){
|
|
//we need root for this part
|
|
if(root === undefined) return;
|
|
|
|
//this is a likely to fail if the string is malformed
|
|
try{
|
|
//split over spaces
|
|
var parts = input.split(" ");
|
|
|
|
//for each word
|
|
for (var i = 0; i < parts.length; i++){
|
|
//split over dots
|
|
var str = parts[i].split(".");
|
|
|
|
//start at root
|
|
parts[i] = root;
|
|
|
|
//for each word between dots
|
|
for (var j = 0; j < str.length; j++){
|
|
parts[i] = parts[i][str[j]];
|
|
}
|
|
}
|
|
|
|
//pull the first word out, might be a function
|
|
var func = parts.splice(0, 1)[0];
|
|
|
|
//if it's a function, apply the arguments to it
|
|
if(_.isFunction(func)) return +func.apply(root, parts);
|
|
|
|
//if it's a number, return it
|
|
if(!isNaN(func)) return +func;
|
|
} catch (err) {
|
|
//TODO pokemon catch statement is bad
|
|
//"gotta catch em all"
|
|
console.log(err);
|
|
return;
|
|
}
|
|
}
|
|
|
|
return +input;
|
|
} |