
Security News
npm ‘is’ Package Hijacked in Expanding Supply Chain Attack
The ongoing npm phishing campaign escalates as attackers hijack the popular 'is' package, embedding malware in multiple versions.
nested-property
Advanced tools
Read, write or test a data structure's nested property via a string like 'my.nested.property'. It works through arrays and objects.'
Traverse a deeply nested JS data structure to get, set values, or test if values are part of the data structure. Nested property offers a simple syntax to define a path to access a value with.
For instance:
const data = {
a: {
b: [
10,
20
]
}
};
nestedProperty.get(data, "a.b.1"); // returns 20, or sdata.a.b[1]
The syntax also supports array wildcards to access all items within an array:
const array = [
{ ssn: "123-456-7890", name: "alice" },
{ ssn: "234-567-8901", name: "bob" },
{ ssn: "456-789-0123", name: "charlie" }
]
nestedProperty.set(array, "+.ssn", "<redacted>"); // sets all `ssn` values to <redacted>
npm install nested-property
Require nested-property:
var nestedProperty = require("nested-property");
You can get a nested property from an object:
var object = {
a: {
b: {
c: {
d: 5
}
}
}
};
nestedProperty.get(object, "a"); // returns object.a
nestedProperty.get(object, "a.b.c"); // returns object.a.b.c
nestedProperty.get(object, "a.b.c.d"); // returns 5
nestedProperty.get(object, "a.d.c"); // returns undefined
nestedProperty.get(object); // returns object
nestedProperty.get(null); // returns null
It also works through arrays:
var array = [{
a: {
b: [0, 1]
}
}];
nestedProperty.get(array, "0"); // returns array[0]
nestedProperty.get(array, "0.a.b"); // returns array[0].a.b
nestedProperty.get(array, "0.a.b.0"); // returns 0
nestedProperty.get(array, "1.a.b.c"); // returns undefined
You may also use wildcards to access multiple values:
var array = [
{ a: 0, b: 1, c: 2 },
{ a: 10, b: 11, c: 12 },
{ a: 20, b: 21, c: 22 }
]
nestedProperty.get(array, "+.b"); // returns [1, 11, 21]
You can set a nested property on an object:
var object = {
a: {
b: {
c: {
d: 5
}
}
}
};
nestedProperty.set(object, "a", 1); // object.a == 1
nestedProperty.set(object, "a.b.c", 1337); // object.a.b.c == 1337
nestedProperty.set(object, "e.f.g", 1); // object.e.f.g == 1, it creates the missing objects!
nestedProperty.set(object); // returns object
nestedProperty.set(null); // returns null
You can also set a nested property through arrays:
var array = [
{
a: [0, 1]
}
];
nestedProperty.set(array, "0.a.0", 10); // array[0].a[0] == 10
nestedProperty.set(array, "0.b.c", 1337); // array[0].b.c == 1337
You may also use wildcards to set multiple values:
var array = [
{ a: 0, b: 1, c: 2 },
{ a: 10, b: 11, c: 12 },
{ a: 20, b: 21, c: 22 }
]
nestedProperty.set(array, "+.b", 0); // array[0].b === 0, array[1].b === 0, array[2].b === 0
You can also test if a data structure has a nested property:
var array = [
{
a: [0, 1]
}
];
nestedProperty.has(array, "0.a"); // true
nestedProperty.has(array, "0.a.1"); // true
nestedProperty.has(array, "0.a.2"); // false
nestedProperty.has(array, "1.a.0"); // false
The example shows that it works through array, but of course, plain objects are fine too.
If it must be an "own" property (i.e. not in the prototype chain) you can use the own option:
function DataStructure() {}
DataStructure.prototype.prop = true;
var obj = new DataStructure();
nestedProperty.has(obj, "prop", { own: true}); // false
nestedProperty.has(obj, "prop"); // true
Alternatively, you can use the hasOwn function:
var obj = Object.create({prop: true});
nestedProperty.hasOwn(obj, "prop"); // false
Just like other methods, you may also use array wildcards. For instance, testing if any item in an array has a given property:
var array = [
{ a: 0, b: 1, c: 2 },
{ a: 10, b: 11, c: 12, d: 13 },
{ a: 20, b: 21, c: 22 }
]
nestedProperty.has(array, "+.d"); // returns true, since array[1].d exists
And finally, you can test if an object is on the path to a nested property:
var obj = {
nested: [
{
property: true
}
]
};
nestedProperty.isIn(obj, "nested.0.property", obj); // true
nestedProperty.isIn(obj, "nested.0.property", obj.nested); // true
nestedProperty.isIn(obj, "nested.0.property", obj.nested[0]); // true
nestedProperty.isIn(obj, "nested.0.property", {}); // false
The path doesn't have to be completely valid to return true, as long as the value exists within the valid portion.
nestedProperty.isIn(obj, "nested.0.property.foo.bar.path", obj.nested[0]); // true
Unless the validPath
option is set to true
, in this case the full path needs to be valid:
nestedProperty.isIn(obj, "nested.0.property.foo.bar.path", obj.nested[0], { validPath: true }); // false
Note that if instead of an object you give it the value of the nested property, it'll return true:
nestedProperty.isIn(obj, "nested.0.property", obj.nested[0].property); // true
nestedProperty.isIn(obj, "nested.0.property", true); // true
+
to access all properties nested within an array. For example:// sets all `name` property in the array to "<redacted>"
nestedProperty.set(array, "+.name", "<redacted>");
Closes Issue #8. Thanks vemuez for the suggestion!
const
with var
to maintain support of pre-ES6 JS interpreters. Thanks stefanorie for the contribution!set()
with an integer in the path and nested-property
creates an object at the location, the object is now an array instead of an object. Hopefully, no user of the nested-property
package should have been expecting to see an object instead of an array, but this constitutes a breaking changes, hence the major update in the semver.Thanks igor-barbosa for the suggestion: PR #2
MIT
FAQs
Read, write or test a data structure's nested property via a string like 'my.nested.property'. It works through arrays and objects.'
The npm package nested-property receives a total of 90,763 weekly downloads. As such, nested-property popularity was classified as popular.
We found that nested-property demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
The ongoing npm phishing campaign escalates as attackers hijack the popular 'is' package, embedding malware in multiple versions.
Security News
A critical flaw in the popular npm form-data package could allow HTTP parameter pollution, affecting millions of projects until patched versions are adopted.
Security News
Bun 1.2.19 introduces isolated installs for smoother monorepo workflows, along with performance boosts, new tooling, and key compatibility fixes.