// const objectScan = require('object-scan');
const myData = [ { id: '1', Name: 'John Doe', children: [ { id: '1.1', name: 'John doe 1.1' }, { 'id:': '1.2', 'name:': 'John doe 1.2' }, { id: '1.3', name: 'John doe 1.3', children: [ { id: '1.3.1', name: 'John doe 1.3.1' } ] } ] }, { id: '2', Name: 'Apple', children: [ { id: '2.1', name: 'Apple 2.1' }, { 'id:': '1.2', 'name:': 'Apple 1.2' } ] } ];
const getNode = (data, id) => objectScan(['**(^children$).id'], {
useArraySelector: false,
abort: true,
rtn: 'parent',
filterFn: ({ value }) => value === id
})(data);
const getNodeWithParents = (data, id) => objectScan(['**(^children$).id'], {
useArraySelector: false,
abort: true,
rtn: 'parents',
filterFn: ({ value }) => value === id
})(data);
console.log(getNode(myData, '2.1'));
// => { id: '2.1', name: 'Apple 2.1' }
console.log(getNodeWithParents(myData, '2.1'));
/* =>
[
{ id: '2.1', name: 'Apple 2.1' },
[ { id: '2.1', name: 'Apple 2.1' }, { 'id:': '1.2', 'name:': 'Apple 1.2' } ],
{ id: '2', Name: 'Apple', children: [ { id: '2.1', name: 'Apple 2.1' }, { 'id:': '1.2', 'name:': 'Apple 1.2' } ] },
[ { id: '1', Name: 'John Doe', children: [ { id: '1.1', name: 'John doe 1.1' }, { 'id:': '1.2', 'name:': 'John doe 1.2' }, { id: '1.3', name: 'John doe 1.3', children: [ { id: '1.3.1', name: 'John doe 1.3.1' } ] } ] }, { id: '2', Name: 'Apple', children: [ { id: '2.1', name: 'Apple 2.1' }, { 'id:': '1.2', 'name:': 'Apple 1.2' } ] } ] ]
*/
.as-console-wrapper {max-height: 100% !important; top: 0}
<script src="https://bundle.run/object-scan@14.0.0"></script>