Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const something = { bar: "Foobar!" };
- const foo = 'bar';
- something.foo; // The idea is to access something.bar, getting "Foobar!"
- const foo = 'bar';
- something[foo];
- var foo = { pName1 : 1, pName2 : [1, {foo : bar }, 3] , ...}
- var name = "pName"
- var num = 1;
- foo[name + num]; // 1
- // --
- var a = 2;
- var b = 1;
- var c = "foo";
- foo[name + a][b][c]; // bar
- var suffix = " name";
- var person = {
- ["first" + suffix]: "Nicholas",
- ["last" + suffix]: "Zakas"
- };
- console.log(person["first name"]); // "Nicholas"
- console.log(person["last name"]); // "Zakas"
- var obj = {method:function(p1,p2,p3){console.log("method:",arguments)}}
- var str = "method('p1', 'p2', 'p3');"
- var match = str.match(/^s*(S+)((.*));s*$/);
- var func = match[1]
- var parameters = match[2].split(',');
- for(var i = 0; i < parameters.length; ++i) {
- // clean up param begninning
- parameters[i] = parameters[i].replace(/^s*['"]?/,'');
- // clean up param end
- parameters[i] = parameters[i].replace(/['"]?s*$/,'');
- }
- obj[func](parameters); // sends parameters as array
- obj[func].apply(this, parameters); // sends parameters as individual values
- function fetchFromObject(obj: Object, path: string): boolean | Object {
- var dot_idx: number;
- var lbkt_idx: number;
- var rbkt_idx: number;
- var prop: string;
- var prop_idx: number;
- var new_obj: Object;
- var new_path: string;
- // Return if no object.
- if (typeof obj === 'undefined') {
- return false;
- }
- // Get index of first left bracket in path.
- lbkt_idx = path.indexOf('[');
- // If left bracket.
- if (lbkt_idx > -1) {
- // Get right bracket index.
- rbkt_idx = path.indexOf(']');
- }
- // Get index of first dot in path.
- dot_idx = path.indexOf('.');
- /*
- * Most complicated situation is if there are both brackets
- * and dots in the path. This means we have a mixture of both
- * indexed and non-indexed properties:
- *
- * x[].y --or-- x.y[]
- *
- * In this case, we must see if the indexed property is before
- * or after the non-indexed property.
- *
- * In either case, we must recurse.
- */
- if ((lbkt_idx > -1) && (dot_idx > -1)) {
- // If bracket is before dot: x[].y
- if (lbkt_idx < dot_idx) {
- // Get property string.
- prop = path.substr(0, lbkt_idx);
- // Get index.
- prop_idx = Number(path.substring(lbkt_idx + 1, rbkt_idx));
- // Get path to right of dot.
- new_path = path.substr(dot_idx + 1);
- // Get new object.
- new_obj = obj[prop][prop_idx];
- // Recurse.
- return fetchFromObject(new_obj, new_path);
- }
- // Else dot before bracket: x.y[]
- else {
- // Get property string.
- prop = path.substr(0, dot_idx);
- // Get path to right of dot.
- new_path = path.substr(dot_idx + 1);
- // Get new object.
- new_obj = obj[prop];
- // Recurse.
- return fetchFromObject(new_obj, new_path);
- }
- }
- /*
- * Else recurse if dotted property; x.y
- */
- else if (dot_idx > -1) {
- // Get property string.
- prop = path.substr(0, dot_idx);
- // Get path to right of dot.
- new_path = path.substr(dot_idx + 1);
- // Get new object.
- new_obj = obj[prop];
- // Recurse.
- return fetchFromObject(new_obj, new_path);
- }
- /*
- * Else done if single indexed property: x[]
- */
- else if (lbkt_idx > -1) {
- // Get property string.
- prop = path.substr(0, lbkt_idx);
- // Get index.
- prop_idx = Number(path.substring(lbkt_idx + 1, rbkt_idx));
- // Return with object.
- return obj[prop][prop_idx];
- }
- /*
- * Else single non-indexed property.
- */
- return obj[path];
- // Accessing root property
- var rootProp = 'rootPropert';
- _.get(object, rootProp, defaultValue);
- // Accessing nested property
- var listOfNestedProperties = [var1, var2];
- _.get(object, listOfNestedProperties);
- var obj = {firstLevel: 1, nested: {test: 2}};
- console.log(eval('obj.firstLevel')); // 1
- console.log(eval('obj.nested.test')); // 2
- // creating reference
- var ref = eval('obj.nested');
- console.log(ref === obj.nested); // true
- ref.newProperty = 3;
- console.log(eval('obj.nested.newProperty')); // 3
- var newObj = {value: 1, nested: {value: 0}};
- eval('newObj.value = 5');
- eval('newObj.nested.value = 10');
- console.log(newObj.value);
- console.log(newObj.nested.value);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement