Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var r = { a:1, b: {b1:11, b2: 99}};
- r.b.b2
- r['b']['b2']
- var s = "b.b2";
- r.s or r[s] //(which of course won't work)
- function getDescendantProp(obj, desc) {
- var arr = desc.split(".");
- while(arr.length && (obj = obj[arr.shift()]));
- return obj;
- }
- console.log(getDescendantProp(r, "b.b2"));
- //-> 99
- var r = { a:1, b: {b1:11, b2: 99}};
- var s = "r.b.b2";
- alert(eval(s)); // 99
- var accessProperties = function(object, string){
- var explodedString = string.split('.');
- for (i = 0, l = explodedString.length; i<l; i++){
- object = object[explodedString[i]];
- }
- return object;
- }
- var r = { a:1, b: {b1:11, b2: 99}};
- var s = "b.b2";
- var o = accessProperties(r, s);
- alert(o);//99
- var s = "['b'].b2";
- var num = eval('r'+s);
- var ret = data; // Your object
- var childexpr = "b.b2"; // Your expression
- if (childexpr != '') {
- var childs = childexpr.split('.');
- var i;
- for (i = 0; i < childs.length && ret != undefined; i++) {
- ret = ret[childs[i]];
- }
- }
- return ret;
- function getDescendantProp(obj, desc) {
- var arr = desc.split(".");
- //while (arr.length && (obj = obj[arr.shift()]));
- while (arr.length && obj) {
- var comp = arr.shift();
- var match = new RegExp("(.+)\[([0-9]*)\]").exec(comp);
- if ((match !== null) && (match.length == 3)) {
- var arrayData = { arrName: match[1], arrIndex: match[2] };
- if (obj[arrayData.arrName] != undefined) {
- obj = obj[arrayData.arrName][arrayData.arrIndex];
- } else {
- obj = undefined;
- }
- } else {
- obj = obj[comp]
- }
- }
- return obj;
- }
- var model = {
- "m1": {
- "Id": "22345",
- "People": [
- { "Name": "John", "Numbers": ["07263", "17236", "1223"] },
- { "Name": "Jenny", "Numbers": ["2", "3", "6"] },
- { "Name": "Bob", "Numbers": ["12", "3333", "4444"] }
- ]
- }
- }
- // Should give you "6"
- var x = getDescendantProp(model, "m1.People[1].Numbers[2]");
- var s = 'b.b2';
- eval('r.' + s); // 99
- function getSetDescendantProp(obj, desc, value) {
- var arr = desc ? desc.split(".") : [];
- while (arr.length && obj) {
- var comp = arr.shift();
- var match = new RegExp("(.+)\[([0-9]*)\]").exec(comp);
- // handle arrays
- if ((match !== null) && (match.length == 3)) {
- var arrayData = {
- arrName: match[1],
- arrIndex: match[2]
- };
- if (obj[arrayData.arrName] !== undefined) {
- if (value && arr.length === 0) {
- obj[arrayData.arrName][arrayData.arrIndex] = value;
- }
- obj = obj[arrayData.arrName][arrayData.arrIndex];
- } else {
- obj = undefined;
- }
- continue;
- }
- // handle regular things
- if (value) {
- if (obj[comp] === undefined) {
- obj[comp] = {};
- }
- if (arr.length === 0) {
- obj[comp] = value;
- }
- }
- obj = obj[comp];
- }
- return obj;
- }
- function getDescendantProp(desc, obj) {
- obj = obj || window;
- var arr = desc.split(".");
- while (arr.length && (obj = obj[arr.shift()]));
- return obj;
- };
- function GetDescendantProps(target, pathString) {
- var arr = pathString.split(".");
- while(arr.length && (target = target[arr.shift()])){
- if (arr.length && target.length && target.forEach) { // handle arrays
- var remainder = arr.join('.');
- var results = [];
- for (var i = 0; i < target.length; i++){
- var x = this.GetDescendantProps(target[i], remainder);
- if (x) results = results.concat(x);
- }
- return results;
- }
- }
- return (target) ? [target] : undefined; //single result, wrap in array for consistency
- }
- var t =
- {a:
- {b: [
- {'c':'x'},
- {'not me':'y'},
- {'c':'z'}
- ]
- }
- };
- GetDescendantProps(t, "a.b.c") === ["x", "z"]; // true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement