var _ = require('underscore') ; var exportFields = exports.collectFields = function collectFields(field,obj) { if ( _.isObject(obj) ) { return _.reduce(obj,function(vals,val,key){ if ( key === field ) { vals.push(val); } return vals.concat(collectFields(field,val)); },[]); } else { return []; } }; var findDuplicates = exports.findDuplicates = function(array,iterator) { iterator = iterator || _.identity; array = _.sortBy(array,iterator); return _.chain(_.initial(array)) .zip(_.rest(array)) .reduce(function(dups,nAndSn){ if ( iterator(nAndSn[0]) === iterator(nAndSn[1]) && nAndSn[0] !== _.last(dups) ) { return dups.concat([nAndSn[0]]); } return dups; },[]) .value(); };