UNPKG

hodash.flatten-to-set

Version:

Flattens an Array/Set. All children which implement .forEach will be flattened into output, alongside non-iterables.

40 lines (32 loc) 873 B
'use strict'; /** * */ module.exports = function flattenToSet(iter, config) { config = config || {}; const output = new Set(); // Explicitly set function rather than check conditional within for performance // reasons. const addToOutput = config.formatter ? (item) => output.add(config.formatter(item)) : (item) => output.add(item); if (!config.deep) { iter.forEach(item => { // Duck typing for flatten. Does not confirm if function. if (item.forEach) item.forEach(addToOutput); else addToOutput(item); }); } else deepFlattenToSet(iter, addToOutput); return output; } /** * */ function deepFlattenToSet(iter, addToOutput) { iter.forEach(item => { // Duck typing for flatten. Does not confirm if function. if (item.forEach) deepFlattenToSet(item, addToOutput); else addToOutput(item); }); }