用函数式编程思维解析anagrams函数
生活随笔
收集整理的這篇文章主要介紹了
用函数式编程思维解析anagrams函数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
//函數(shù)式編程思維分析 這個(gè)排列函數(shù)
const anagrams = str => {if (str.length <= 2) return str.length === 2 ? [str, str[1] + str[0]] : [str];return str.split('').reduce((acc, letter, i) =>acc.concat(anagrams(str.slice(0, i) + str.slice(i + 1)).map(val => letter + val)), []);
};const result = anagrams('abc');
console.log(result);//['abc','acb','bac','bca','cab','cba'];//函數(shù)式編程基本思維:
//在函數(shù)式編程中,可以應(yīng)用數(shù)學(xué)上的分配律和結(jié)合律,遞歸最好的理解方式
//這里用了分配率和結(jié)合律
//reduce(遍歷+迭代)
//遞歸(組合分配律和結(jié)合律式子)
//map(運(yùn)算分配律式子:展開式子)//以'abcd'為demo解析
//先用reduce 獲得算子 'a' 'b' 'c' 'd'
//最終結(jié)果用[]來統(tǒng)計(jì),或者叫記錄吧
//遞歸: 'a'(...) 'b'(...) 'c'(...) 'd'(...) : 組合成分配律和結(jié)合律式子
//其中... ,這里以'a'(...) 為demo
//'a'(...)的...為'bcd'
//由遞歸再組合分配律和結(jié)合律式子 'a'('b'(...) + 'c'(...) + 'd'(...))
//由遞歸再組合分配律和結(jié)合律式子 'a'('b'('cd'+'dc') + 'c'('bd' + 'db') + 'd'('bc' + 'cb'));
//map用于運(yùn)算分配律和結(jié)合律式子 'a'('bcd' + 'bdc' + 'cbd' + 'cdb' + 'dbc' + 'dcb');
//map用于運(yùn)算分配律和結(jié)合律式子 'abcd' + 'abdc' + 'acbd' + 'acdb' + 'adbc' +'adcb';
//concat是+號(hào)
console.log(anagrams('abcd'));//['abcd','abdc','acbd','acdb','adbc','adcb',...余下的是'b'(...) 'c'(...) 'd'(...)的情況]
?
轉(zhuǎn)載于:https://www.cnblogs.com/lantuoxie/p/8056825.html
總結(jié)
以上是生活随笔為你收集整理的用函数式编程思维解析anagrams函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ant打包总结
- 下一篇: 【C#】C#创建Windows Serv