Advertisement
Guest User

Untitled

a guest
Aug 28th, 2014
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.92 KB | None | 0 0
  1. var r = { a:1, b: {b1:11, b2: 99}};
  2.  
  3. r.b.b2
  4. r['b']['b2']
  5.  
  6. var s = "b.b2";
  7.  
  8. r.s or r[s] //(which of course won't work)
  9.  
  10. function getDescendantProp(obj, desc) {
  11. var arr = desc.split(".");
  12. while(arr.length && (obj = obj[arr.shift()]));
  13. return obj;
  14. }
  15.  
  16. console.log(getDescendantProp(r, "b.b2"));
  17. //-> 99
  18.  
  19. var r = { a:1, b: {b1:11, b2: 99}};
  20. var s = "r.b.b2";
  21. alert(eval(s)); // 99
  22.  
  23. var accessProperties = function(object, string){
  24. var explodedString = string.split('.');
  25. for (i = 0, l = explodedString.length; i<l; i++){
  26. object = object[explodedString[i]];
  27. }
  28. return object;
  29. }
  30. var r = { a:1, b: {b1:11, b2: 99}};
  31.  
  32. var s = "b.b2";
  33. var o = accessProperties(r, s);
  34. alert(o);//99
  35.  
  36. var s = "['b'].b2";
  37. var num = eval('r'+s);
  38.  
  39. var ret = data; // Your object
  40. var childexpr = "b.b2"; // Your expression
  41.  
  42. if (childexpr != '') {
  43. var childs = childexpr.split('.');
  44. var i;
  45. for (i = 0; i < childs.length && ret != undefined; i++) {
  46. ret = ret[childs[i]];
  47. }
  48. }
  49.  
  50. return ret;
  51.  
  52. function getDescendantProp(obj, desc) {
  53. var arr = desc.split(".");
  54.  
  55. //while (arr.length && (obj = obj[arr.shift()]));
  56.  
  57. while (arr.length && obj) {
  58. var comp = arr.shift();
  59. var match = new RegExp("(.+)\[([0-9]*)\]").exec(comp);
  60. if ((match !== null) && (match.length == 3)) {
  61. var arrayData = { arrName: match[1], arrIndex: match[2] };
  62. if (obj[arrayData.arrName] != undefined) {
  63. obj = obj[arrayData.arrName][arrayData.arrIndex];
  64. } else {
  65. obj = undefined;
  66. }
  67. } else {
  68. obj = obj[comp]
  69. }
  70. }
  71.  
  72. return obj;
  73. }
  74.  
  75. var model = {
  76. "m1": {
  77. "Id": "22345",
  78. "People": [
  79. { "Name": "John", "Numbers": ["07263", "17236", "1223"] },
  80. { "Name": "Jenny", "Numbers": ["2", "3", "6"] },
  81. { "Name": "Bob", "Numbers": ["12", "3333", "4444"] }
  82. ]
  83. }
  84. }
  85.  
  86. // Should give you "6"
  87. var x = getDescendantProp(model, "m1.People[1].Numbers[2]");
  88.  
  89. var s = 'b.b2';
  90.  
  91. eval('r.' + s); // 99
  92.  
  93. function getSetDescendantProp(obj, desc, value) {
  94. var arr = desc ? desc.split(".") : [];
  95.  
  96. while (arr.length && obj) {
  97. var comp = arr.shift();
  98. var match = new RegExp("(.+)\[([0-9]*)\]").exec(comp);
  99.  
  100. // handle arrays
  101. if ((match !== null) && (match.length == 3)) {
  102. var arrayData = {
  103. arrName: match[1],
  104. arrIndex: match[2]
  105. };
  106. if (obj[arrayData.arrName] !== undefined) {
  107. if (value && arr.length === 0) {
  108. obj[arrayData.arrName][arrayData.arrIndex] = value;
  109. }
  110. obj = obj[arrayData.arrName][arrayData.arrIndex];
  111. } else {
  112. obj = undefined;
  113. }
  114.  
  115. continue;
  116. }
  117.  
  118. // handle regular things
  119. if (value) {
  120. if (obj[comp] === undefined) {
  121. obj[comp] = {};
  122. }
  123.  
  124. if (arr.length === 0) {
  125. obj[comp] = value;
  126. }
  127. }
  128.  
  129. obj = obj[comp];
  130. }
  131.  
  132. return obj;
  133. }
  134.  
  135. function getDescendantProp(desc, obj) {
  136. obj = obj || window;
  137. var arr = desc.split(".");
  138. while (arr.length && (obj = obj[arr.shift()]));
  139. return obj;
  140. };
  141.  
  142. function GetDescendantProps(target, pathString) {
  143. var arr = pathString.split(".");
  144. while(arr.length && (target = target[arr.shift()])){
  145. if (arr.length && target.length && target.forEach) { // handle arrays
  146. var remainder = arr.join('.');
  147. var results = [];
  148. for (var i = 0; i < target.length; i++){
  149. var x = this.GetDescendantProps(target[i], remainder);
  150. if (x) results = results.concat(x);
  151. }
  152. return results;
  153. }
  154. }
  155. return (target) ? [target] : undefined; //single result, wrap in array for consistency
  156. }
  157.  
  158. var t =
  159. {a:
  160. {b: [
  161. {'c':'x'},
  162. {'not me':'y'},
  163. {'c':'z'}
  164. ]
  165. }
  166. };
  167.  
  168. GetDescendantProps(t, "a.b.c") === ["x", "z"]; // true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement