deep-grep
Too many haystacks, not enough needles — or, "when you have a grep,
everything looks like a list."
var needles = dg.deeply( [
foo, [
bar, baz, [
bletch, [
qip
]
]
] ], function (t) { if t == qip return t }
)
usage
For grep on simple, flat (non-nested) lists:
dg.in()
dg.in( list, 'value' )
- returns true
or false
depending upon
whether list
contains value
.
dg.all_in()
dg.all_in( list_a, list_b )
- returns a list of all values in list_a
that exist in list_b
.
dg.unique()
dg.unique( list )
- returns all unique values of list
. Note: flattens.
dg.flatten( )
dg.flatten( nested_list )
- returns a list of all the lists contained in
nested_list
, concatenated into a single scope.
For doing greppy things on nested lists:
var haystack = [
'zebra', 'lion', [
'tiger', 'unicorn', 'emperor penguin'
],
'leprechaun',
'cockerel'
];
var needles = dg.deeply( list, function (t) {
if (new RegExp( ('(unicorn|leprechaun)s?' ).test(t))) return true
} );
For more complex data, options are available to you:
var needles = dg.deeply( arks['Noah'], function (t) { ... }, {
'check-object-methods': [ 'get_species', 'list_passengers' ],
'object-method-arguments': [ argument, function, 'etc' ],
'check-keys': true,
'check-values': true,
'return-hash-tuples': true,
} );
deprecated methods
dg.sync()
dg.sync( list, expression )
- evaluates list
, returning a new list of every
element that matches expression.test
(like RegExp
).
dg.sync( list, func )
- same as above, only executes func
for every element
of list, returning a new list.
dg.async()
dg.async( list, expression )
- same as with sync()
, above, only
returns a promise to the list of matches.
dg.async( list, func, callback )
- same as sync()
, above, except the
callback is called with a promise to the list of matches.
author
@janearc, jane@cpan.org