[UNMAINTAINED] Traverse and modify objects using JSONSelect selectors
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
test return tranformed object from update(), remove(), forEach(), and cond… Jul 15, 2013
index.js return tranformed object from update(), remove(), forEach(), and cond… Jul 15, 2013
select-min.js Added tests, updated documentation & client-side scripts. Sep 17, 2012



js-select uses js-traverse to traverse and modify JavaScript object nodes that match JSONSelect selectors.

var people = {
   george: {
      age : 35,
      movie: "Repo Man"
   mary: {
      age: 15,
      movie: "Twilight"


Iterates over all matching nodes in the object. The callback gets a special this context. See js-traverse for all the things you can do to modify and inspect the node with this context. In addition, js-select adds a this.matches() which will test if the node matches a selector:

select(people).forEach(function(node) {
   if (this.matches(".mary > .movie")) {


Returns all matching nodes from the object.

select(people, ".age").nodes(); // [35, 15]


Removes matching elements from the original object.

select(people, ".age").remove();


Updates all matching nodes using the given callback.

select(people, ".age").update(function(age) {
   return age - 5;


Reduces the original object down to only the matching elements (the hierarchy is maintained).

select(people, ".age").condense();
    george: { age: 35 },
    mary: { age: 15 }


js-select supports the following JSONSelect selectors:

ancestor selector
parent > selector
sibling ~ selector
selector1, selector2

See details on each selector, and try them out on the JSONSelect website.


For node, install with npm:

npm install js-select

For the browser, download the select.js file or fetch the latest version from npm and build a browser file using browserify:

npm install browserify -g
npm install js-select

browserify --require js-select --outfile select.js

this will build a browser file with require('js-select') available.


Huge thanks to @substack for the ingenious js-traverse and @lloyd for the ingenious JSONSelect spec and selector parser.