object-path

Access deep properties using a path

object-path

Access deep properties using a path

npm install object-path
bower install object-path
tsd query object-path --action install --save
 
var obj = {
  a: {
    b: "d",
    c: ["e", "f"]
  }
};
 
var objectPath = require("object-path");
 
//get deep property 
objectPath.get(obj, "a.b");  //returns "d" 
 
//get the first non-undefined value 
objectPath.coalesce(obj, ['a.z', 'a.d', ['a','b']], 'default');
 
//empty a given path (but do not delete it) depending on their type,so it retains reference to objects and arrays. 
//functions that are not inherited from prototype are set to null. 
//object instances are considered objects and just own property names are deleted 
objectPath.empty(obj, 'a.b'); // obj.a.b is now '' 
objectPath.empty(obj, 'a.c'); // obj.a.c is now [] 
objectPath.empty(obj, 'a'); // obj.a is now {} 
 
//works also with arrays 
objectPath.get(obj, "a.c.1");  //returns "f" 
objectPath.get(obj, ["a","c","1"]);  //returns "f" 
 
//can return a default value with get 
objectPath.get(obj, ["a.c.b"], "DEFAULT");  //returns "DEFAULT", since a.c.b path doesn't exists, if omitted, returns undefined 
 
//set 
objectPath.set(obj, "a.h", "m"); // or objectPath.set(obj, ["a","h"], "m"); 
objectPath.get(obj, "a.h");  //returns "m" 
 
//set will create intermediate object/arrays 
objectPath.set(obj, "a.j.0.f", "m");
 
//will insert values in array 
objectPath.insert(obj, "a.c", "m", 1); // obj.a.c = ["e", "m", "f"] 
 
//push into arrays (and create intermediate objects/arrays) 
objectPath.push(obj, "a.k", "o");
 
//ensure a path exists (if it doesn't, set the default value you provide) 
objectPath.ensureExists(obj, "a.k.1", "DEFAULT");
 
//deletes a path 
objectPath.del(obj, "a.b"); // obj.a.b is now undefined 
objectPath.del(obj, ["a","c",0]); // obj.a.c is now ['f'] 
 
//tests path existence 
objectPath.has(obj, "a.b"); // true 
objectPath.has(obj, ["a","d"]); // false 
 
//bind object 
var model = objectPath({
  a: {
    b: "d",
    c: ["e", "f"]
  }
});
 
//now any method from above is supported directly w/o passing an object 
model.get("a.b");  //returns "d" 
model.get(["a.c.b"], "DEFAULT");  //returns "DEFAULT" 
model.del("a.b"); // obj.a.b is now undefined 
model.has("a.b"); // false