Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * 写一个函数,传入一个数组,
- * 要求返回数组中所有的元素组合的数组
- *
- * [1, 2] => [
- * 12,
- * 21,
- * ]
- * [1, 2, 3] => [
- * 123, 132,
- * 213, 231,
- * 312, 321,
- * ]
- * [1, 2, 3, 4] => [
- * 1234, 1243, 1324, 1342, 1423, 1432,
- * 2134, 2143, 2314, 2341, 2413, 2431,
- * 3124, 3142, 3214, 3241, 3412, 3421,
- * 4123, 4132, 4213, 4231, 4312, 4321,
- * ]
- *
- */
- const DEBUG = false
- const combineArray = (data, arr, comb) => {
- arr = arr || data
- comb = comb || ''
- return arr.map((value, index, currentArr) => {
- const _comb = comb ? `${comb},${value}` : `${value}`
- const l = index - 1
- const r = index + 1
- const p = currentArr.slice(0, Math.max(0, l + 1))
- const n = currentArr.slice(Math.min(r, currentArr.length))
- const _arr = p.concat(n)
- if (DEBUG) {
- console.group('flag')
- console.log(`%cdata:`, 'color: purple', `[${data}]`)
- console.log(`@:`, index)
- console.log(`currentArr => ${currentArr}`)
- console.log(`comb => ${comb}`)
- console.log(`arr => ${arr}`)
- console.log(`-----------------------`)
- console.log(`_comb => ${_comb}`)
- console.log(`_arr => ${_arr}`)
- console.log(`=======================`)
- console.groupEnd()
- }
- if (_arr.length) {
- return combineArray(data, _arr, _comb)
- } else {
- if (DEBUG) {
- console.log(
- `%c● %c${_comb}`,
- 'color: red; font-size: 14px',
- 'padding: .2em .42em; font-weight: 700; background-color: #ddd; border-radius: 4px'
- )
- }
- return _comb
- }
- })
- }
- const formatArray = (data, fn, result) => {
- fn = fn || factorial(data.length)
- result = result || []
- for (let o of data) {
- if (Array.isArray(o)) {
- formatArray(o, fn, result)
- } else {
- result.push(o)
- }
- }
- if (result.length === fn) {
- return result
- }
- }
- const factorial = (num) => {
- if (Number.isInteger(num)) {
- if (num === 0) {
- return 1
- } else {
- return num * factorial(num - 1)
- }
- }
- }
- const a = [1, 2]
- const b = [1, 2, 3]
- const c = [1, 2, 3, 4]
- // console.log( combineArray(a) )
- // console.log( combineArray(b) )
- console.log( combineArray(c) )
- console.log( formatArray(combineArray(c)) )
- // console.log( combineArray( ['A'] ) )
- // console.log( combineArray( ['A', 'B'] ) )
- console.log( combineArray( ['A', 'B', 'C'] ) )
- console.log( formatArray(combineArray( ['A', 'B', 'C'] )) )
Add Comment
Please, Sign In to add comment