陣列的操作(2)
1、使用遞迴。對於給定字串中的每個字母,為字母建立字謎。使用map()將字母與每部分字謎組合,然後使用reduce()將所有字謎組合到一個陣列中,最基本情況是字串長度等於2或1。
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)), []); }; // anagrams(`abc`) -> [`abc`,`acb`,`bac`,`bca`,`cab`,`cba`] // anagrams(`讀好書`) -> ["讀好書", "讀書好", "好讀書", "好書讀", "書讀好", "書好讀"]
相當於資料裡的排列組合裡面的 全排列 個數就是 arr.length !
這裡介紹一些 reduce 。
mdn說:
reduce()
方法對累加器和陣列中的每個元素(從左到右)應用一個函式,將其減少為單個值。
var total = [0, 1, 2, 3].reduce(function(sum, value) { return sum + value; }, 0); // total is 6 var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) { return a.concat(b); }, []); // flattened is [0, 1, 2, 3, 4, 5]
可以簡單理解對 陣列的元素逐項做操作,下面是es6的寫法
var flattened = [[0, 1], [2, 3], [4, 5]].reduce( ( acc, cur ) => acc.concat(cur), [] );
詳細案例參考 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
更多有趣的陣列操作: http://news.51cto.com/art/201712/561035.htm
相關文章
- NumPy 學習(2): 陣列的操作陣列
- 陣列的reduce操作+物件陣列的map操作陣列物件
- 陣列操作陣列
- 對陣列的操作陣列
- Scala的陣列操作陣列
- 陣列的基本操作陣列
- vue陣列操作遇到坑-關於陣列操作Vue陣列
- 初識Java(Java陣列-陣列的基本操作)Java陣列
- 陣列的操作-變形陣列
- javascript陣列操作JavaScript陣列
- Numpy陣列操作陣列
- Scala陣列操作陣列
- Jquery陣列操作jQuery陣列
- JavaScript 陣列操作JavaScript陣列
- [NOIP 2024 模擬2]陣列操作陣列
- PHP xml 轉陣列 陣列轉 xml 操作PHPXML陣列
- Ruby 中陣列的常用操作陣列
- JavaScript中對陣列的操作JavaScript陣列
- JS常用陣列操作JS陣列
- JavaScript陣列常用操作JavaScript陣列
- JS中陣列操作JS陣列
- 記一次陣列操作:陣列 A 根據陣列 B 排序陣列排序
- 陣列的操作處理與陣列元素的氣泡排序 (轉)陣列排序
- 2-7 陣列:動態陣列陣列
- numpy陣列(2)陣列
- Java陣列操作的10大方法Java陣列
- Python陣列常用操作Python陣列
- Numpy 陣列簡單操作陣列
- Java操作Json陣列JavaJSON陣列
- perl操作二維陣列陣列
- 常用的幾個陣列操作方法陣列
- [Shell] awk 陣列(2)陣列
- JavaScript 陣列常見操作(一)JavaScript陣列
- JavaScript 陣列常見操作 (二)JavaScript陣列
- JS常用陣列操作全解析JS陣列
- lua陣列操作效能測試陣列
- 磁碟陣列操作手冊陣列
- C++ 獲取陣列大小、多維陣列操作詳解C++陣列