@@ -4,7 +4,7 @@ define(['exports', './_jsPlatform/_list', './_jsPlatform/_function', './_functio
44 Object . defineProperty ( exports , "__esModule" , {
55 value : true
66 } ) ;
7- exports . complement = exports . difference = exports . intersectBy = exports . intersect = exports . union = exports . unionBy = exports . removeFirstsBy = exports . removeBy = exports . nubBy = exports . insertBy = exports . insert = exports . sortBy = exports . sortOn = exports . sort = exports . remove = exports . nub = exports . scanr1 = exports . scanr = exports . scanl1 = exports . scanl = exports . minimum = exports . maximum = exports . product = exports . sum = exports . not = exports . or = exports . and = exports . all = exports . any = exports . unzipN = exports . unzip = exports . zipWith5 = exports . zipWith4 = exports . zipWith3 = exports . zipWithN = exports . zipWith = exports . zip5 = exports . zip4 = exports . zip3 = exports . zipN = exports . zip = exports . stripPrefix = exports . tails = exports . inits = exports . groupBy = exports . group = exports . isSubsequenceOf = exports . isInfixOf = exports . isSuffixOf = exports . isPrefixOf = exports . lookup = exports . notElem = exports . elem = exports . partition = exports . filter = exports . find = exports . at = exports . breakOnList = exports . span = exports . dropWhileEnd = exports . dropWhile = exports . takeWhile = exports . splitAt = exports . drop = exports . take = exports . elemIndices = exports . elemIndex = exports . findIndices = exports . findIndex = exports . unfoldr = exports . cycle = exports . replicate = exports . repeat = exports . iterate = exports . mapAccumR = exports . mapAccumL = exports . foldr1 = exports . foldl1 = exports . foldr = exports . foldl = exports . permutations = exports . subsequences = exports . transpose = exports . intercalate = exports . intersperse = exports . reverse = exports . concatMap = exports . concat = exports . unconsr = exports . uncons = exports . init = exports . tail = exports . last = exports . head = exports . appendMany = exports . append = exports . map = undefined ;
7+ exports . complement = exports . difference = exports . intersectBy = exports . intersect = exports . union = exports . unionBy = exports . removeFirstsBy = exports . removeBy = exports . nubBy = exports . insertBy = exports . insert = exports . sortBy = exports . sortOn = exports . sort = exports . remove = exports . nub = exports . scanr1 = exports . scanr = exports . scanl1 = exports . scanl = exports . minimum = exports . maximum = exports . product = exports . sum = exports . not = exports . or = exports . and = exports . all = exports . any = exports . unzipN = exports . unzip = exports . zipWith5 = exports . zipWith4 = exports . zipWith3 = exports . zipWithN = exports . zipWith = exports . zip5 = exports . zip4 = exports . zip3 = exports . zipN = exports . zip = exports . stripPrefix = exports . tails = exports . inits = exports . groupBy = exports . group = exports . isSubsequenceOf = exports . isInfixOf = exports . isSuffixOf = exports . isPrefixOf = exports . lookup = exports . notElem = exports . elem = exports . partition = exports . filter = exports . find = exports . at = exports . breakOnList = exports . span = exports . dropWhileEnd = exports . dropWhile = exports . takeWhile = exports . splitAt = exports . drop = exports . take = exports . elemIndices = exports . elemIndex = exports . findIndices = exports . findIndex = exports . unfoldr = exports . cycle = exports . replicate = exports . repeat = exports . iterate = exports . mapAccumR = exports . mapAccumL = exports . foldr1 = exports . foldl1 = exports . foldr = exports . foldl = exports . permutations = exports . subsequences1 = exports . subsequences = exports . transpose = exports . intercalate = exports . intersperse = exports . reverse = exports . concatMap = exports . concat = exports . unconsr = exports . uncons = exports . init = exports . tail = exports . last = exports . head = exports . appendMany = exports . append = exports . map = undefined ;
88 exports . map = _map . map ;
99
1010
@@ -247,11 +247,6 @@ define(['exports', './_jsPlatform/_list', './_jsPlatform/_function', './_functio
247247 * @returns {Array.<Array> }
248248 */
249249 subsequences = exports . subsequences = xs => {
250- // if (isset(xs) && !xs.hasOwnProperty('length')) {
251- // throw new Error('`sub-sequences` function can only operate on values that have a `length` property and ' +
252- // 'have index-able properties (`obj[0] //etc... (Arrays, strings etc.)`). ' +
253- // 'Type given "' + typeOf(xs) + '". Given `toString`: "' + xs + '";');
254- // }
255250 const listLen = ( 0 , _objectOps . length ) ( xs ) ,
256251 len = Math . pow ( 2 , listLen ) ,
257252 out = [ ] ;
@@ -268,6 +263,33 @@ define(['exports', './_jsPlatform/_list', './_jsPlatform/_function', './_functio
268263 } ,
269264
270265
266+ /**
267+ * Same as `subsequences` but returns an `Array.<Type>` instead
268+ * of an array of arrays. **Note:** `Type` here means
269+ * a string, an instance of array, or some indexable-like type.
270+ * @function module:_listOps.subsequences1
271+ * @jsperftest https://jsperf.com/subsequences
272+ * @param xs {Array|String}
273+ * @returns {Array.<(Array|String|*)> }
274+ */
275+ subsequences1 = exports . subsequences1 = xs => {
276+ const listLen = ( 0 , _objectOps . length ) ( xs ) ,
277+ len = Math . pow ( 2 , listLen ) ,
278+ aggregator = ( 0 , _utils . aggregatorByType ) ( xs ) ,
279+ out = [ ] ;
280+ for ( let i = 0 ; i < len ; i += 1 ) {
281+ let entry = ( 0 , _objectOps . of ) ( xs ) ;
282+ for ( let j = 0 ; j < listLen ; j += 1 ) {
283+ if ( i & 1 << j ) {
284+ entry = aggregator ( entry , xs [ j ] ) ;
285+ }
286+ }
287+ out . push ( entry ) ;
288+ }
289+ return out ;
290+ } ,
291+
292+
271293 /**
272294 * Returns a list of permutations for passed in list.
273295 * Use caution with lists above a length of 15 (will take long due to nature of
@@ -278,7 +300,7 @@ define(['exports', './_jsPlatform/_list', './_jsPlatform/_function', './_functio
278300 */
279301 permutations = exports . permutations = xs => {
280302 const limit = ( 0 , _objectOps . length ) ( xs ) ;
281- return ! limit ? [ xs ] : ( 0 , _utils . _permutationsAlgo ) ( xs , limit , limit ) ;
303+ return ! limit || limit === 1 ? [ xs ] : ( 0 , _utils . _permutationsAlgo ) ( xs , limit , limit ) ;
282304 } ,
283305
284306
0 commit comments