I have this recursive function that searches an object tree structure:
dataSearcher = (dataElement, identifierToFind) ->
if dataElement.identifier == identifierToFind
return dataElement
else
for childDataElement in dataElement.children
found = dataSearcher childDataElement, identifierToFind
if found then return found
Which I then call thus:
foundDataElement = dataSearcher @options.nodeData, identifier
It works just fine so I am happy about that, but I am pretty new to CoffeeScript and would like feedback on the way I structured it. The loop I used seems a bit old school, so could I have used a comprehension here instead? Any other feedback would be great as I am still getting my head into the CoffeeScript idiom.
Please let me know if I should edit with more context code.
for
a comprehension, but it wouldn't cut the visit short when a match was found, so while this is less "functional" it's just as good. The real test of code is this: which do you expect to be able to read six months from now? I'd remove the 'else', but that's my Haskell training talking: you've got a guard condition at the top of your function, not an alternative, but that's how I read things. \$\endgroup\$mapDetect
(see gist.github.com/1222480 for a underscore implementation). In a lazy language it would be(head . filter predicate)
. \$\endgroup\$