| var assert = require('assert'); |
| var traverse = require('traverse'); |
| |
| exports.siblings = function () { |
| var obj = { a : 1, b : 2, c : [ 4, 5, 6 ] }; |
| |
| var res = traverse(obj).reduce(function (acc, x) { |
| var p = '/' + this.path.join('/'); |
| if (this.parent) { |
| acc[p] = { |
| siblings : this.parent.keys, |
| key : this.key, |
| index : this.parent.keys.indexOf(this.key) |
| }; |
| } |
| else { |
| acc[p] = { |
| siblings : [], |
| key : this.key, |
| index : -1 |
| } |
| } |
| return acc; |
| }, {}); |
| |
| assert.deepEqual(res, { |
| '/' : { siblings : [], key : undefined, index : -1 }, |
| '/a' : { siblings : [ 'a', 'b', 'c' ], key : 'a', index : 0 }, |
| '/b' : { siblings : [ 'a', 'b', 'c' ], key : 'b', index : 1 }, |
| '/c' : { siblings : [ 'a', 'b', 'c' ], key : 'c', index : 2 }, |
| '/c/0' : { siblings : [ '0', '1', '2' ], key : '0', index : 0 }, |
| '/c/1' : { siblings : [ '0', '1', '2' ], key : '1', index : 1 }, |
| '/c/2' : { siblings : [ '0', '1', '2' ], key : '2', index : 2 } |
| }); |
| }; |