UNPKG

locutus

Version:

Locutus other languages' standard libraries to JavaScript for fun and educational purposes

26 lines (25 loc) 928 B
export function subsequences(items) { // discuss at: https://locutus.io/haskell/list/subsequences/ // original by: Kevin van Zonneveld (https://kvz.io) // note 1: Returns all subsequences (power set) while preserving element order, matching Haskell Data.List.subsequences. // example 1: subsequences([1, 2, 3]) // returns 1: [[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]] // example 2: subsequences(['a', 'b']) // returns 2: [[], ['a'], ['b'], ['a', 'b']] // example 3: subsequences([]) // returns 3: [[]] if (!Array.isArray(items)) { return [[]]; } const out = [[]]; for (const item of items) { const currentLength = out.length; for (let i = 0; i < currentLength; i++) { const prefix = out[i]; if (prefix) { out.push([...prefix, item]); } } } return out; }