Advertisement
Guest User

Untitled

a guest
Jan 16th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.13 KB | None | 0 0
  1. const something = { bar: "Foobar!" };
  2. const foo = 'bar';
  3. something.foo; // The idea is to access something.bar, getting "Foobar!"
  4.  
  5. const foo = 'bar';
  6. something[foo];
  7.  
  8. var foo = { pName1 : 1, pName2 : [1, {foo : bar }, 3] , ...}
  9.  
  10. var name = "pName"
  11. var num = 1;
  12.  
  13. foo[name + num]; // 1
  14.  
  15. // --
  16.  
  17. var a = 2;
  18. var b = 1;
  19. var c = "foo";
  20.  
  21. foo[name + a][b][c]; // bar
  22.  
  23. var suffix = " name";
  24.  
  25. var person = {
  26. ["first" + suffix]: "Nicholas",
  27. ["last" + suffix]: "Zakas"
  28. };
  29.  
  30. console.log(person["first name"]); // "Nicholas"
  31. console.log(person["last name"]); // "Zakas"
  32.  
  33. var obj = {method:function(p1,p2,p3){console.log("method:",arguments)}}
  34.  
  35. var str = "method('p1', 'p2', 'p3');"
  36.  
  37. var match = str.match(/^s*(S+)((.*));s*$/);
  38.  
  39. var func = match[1]
  40. var parameters = match[2].split(',');
  41. for(var i = 0; i < parameters.length; ++i) {
  42. // clean up param begninning
  43. parameters[i] = parameters[i].replace(/^s*['"]?/,'');
  44. // clean up param end
  45. parameters[i] = parameters[i].replace(/['"]?s*$/,'');
  46. }
  47.  
  48. obj[func](parameters); // sends parameters as array
  49. obj[func].apply(this, parameters); // sends parameters as individual values
  50.  
  51. function fetchFromObject(obj: Object, path: string): boolean | Object {
  52. var dot_idx: number;
  53. var lbkt_idx: number;
  54. var rbkt_idx: number;
  55. var prop: string;
  56. var prop_idx: number;
  57. var new_obj: Object;
  58. var new_path: string;
  59.  
  60. // Return if no object.
  61. if (typeof obj === 'undefined') {
  62. return false;
  63. }
  64.  
  65. // Get index of first left bracket in path.
  66. lbkt_idx = path.indexOf('[');
  67. // If left bracket.
  68. if (lbkt_idx > -1) {
  69. // Get right bracket index.
  70. rbkt_idx = path.indexOf(']');
  71. }
  72. // Get index of first dot in path.
  73. dot_idx = path.indexOf('.');
  74.  
  75. /*
  76. * Most complicated situation is if there are both brackets
  77. * and dots in the path. This means we have a mixture of both
  78. * indexed and non-indexed properties:
  79. *
  80. * x[].y --or-- x.y[]
  81. *
  82. * In this case, we must see if the indexed property is before
  83. * or after the non-indexed property.
  84. *
  85. * In either case, we must recurse.
  86. */
  87. if ((lbkt_idx > -1) && (dot_idx > -1)) {
  88. // If bracket is before dot: x[].y
  89. if (lbkt_idx < dot_idx) {
  90. // Get property string.
  91. prop = path.substr(0, lbkt_idx);
  92. // Get index.
  93. prop_idx = Number(path.substring(lbkt_idx + 1, rbkt_idx));
  94. // Get path to right of dot.
  95. new_path = path.substr(dot_idx + 1);
  96. // Get new object.
  97. new_obj = obj[prop][prop_idx];
  98. // Recurse.
  99. return fetchFromObject(new_obj, new_path);
  100. }
  101. // Else dot before bracket: x.y[]
  102. else {
  103. // Get property string.
  104. prop = path.substr(0, dot_idx);
  105. // Get path to right of dot.
  106. new_path = path.substr(dot_idx + 1);
  107. // Get new object.
  108. new_obj = obj[prop];
  109. // Recurse.
  110. return fetchFromObject(new_obj, new_path);
  111. }
  112. }
  113. /*
  114. * Else recurse if dotted property; x.y
  115. */
  116. else if (dot_idx > -1) {
  117. // Get property string.
  118. prop = path.substr(0, dot_idx);
  119. // Get path to right of dot.
  120. new_path = path.substr(dot_idx + 1);
  121. // Get new object.
  122. new_obj = obj[prop];
  123. // Recurse.
  124. return fetchFromObject(new_obj, new_path);
  125. }
  126. /*
  127. * Else done if single indexed property: x[]
  128. */
  129. else if (lbkt_idx > -1) {
  130. // Get property string.
  131. prop = path.substr(0, lbkt_idx);
  132. // Get index.
  133. prop_idx = Number(path.substring(lbkt_idx + 1, rbkt_idx));
  134. // Return with object.
  135. return obj[prop][prop_idx];
  136. }
  137. /*
  138. * Else single non-indexed property.
  139. */
  140. return obj[path];
  141.  
  142. // Accessing root property
  143. var rootProp = 'rootPropert';
  144. _.get(object, rootProp, defaultValue);
  145.  
  146. // Accessing nested property
  147. var listOfNestedProperties = [var1, var2];
  148. _.get(object, listOfNestedProperties);
  149.  
  150. var obj = {firstLevel: 1, nested: {test: 2}};
  151. console.log(eval('obj.firstLevel')); // 1
  152. console.log(eval('obj.nested.test')); // 2
  153.  
  154. // creating reference
  155. var ref = eval('obj.nested');
  156. console.log(ref === obj.nested); // true
  157. ref.newProperty = 3;
  158. console.log(eval('obj.nested.newProperty')); // 3
  159.  
  160. var newObj = {value: 1, nested: {value: 0}};
  161. eval('newObj.value = 5');
  162. eval('newObj.nested.value = 10');
  163. console.log(newObj.value);
  164. console.log(newObj.nested.value);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement