jia 林
- <!DOCTYPE html>
- <HTML>
- <head>
- <title>
- </title>
- </head>
- <body>
- <script type="text/javascript">
- // 电话号码组合
- // a. 从映射的字符串变成数组
- // b. 组合运算
- function phoneNum(str) {
- // I, 保存隐射的内容 index=2=>abc 为了让数字和字母相对应 建立电话号码键盘隐射
- let map = ["", 1, "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"];
- //II, 输入的字符串分割成不同字符, 变成数组 234=>[2,3,4]
- let num = str.split("");
- //III, 输入字符串所映射的键盘内容 保存键盘映射后的字母内容 23=>["abc","def"]
- let code = [];
- num.forEach(item = >{
- // item=> 2,3,4,5
- // map[item] =>abc,def
- if (map[item]) {
- code.push(map[item]);
- }
- });
- // IIII, 组合运算
- let comb = (arr) = >{
- // 临时变量, 保存前 2 个组合的结果
- let tmp = [];
- // 最外层的循环是遍历第一个元素, 里层的循环是遍历第二个元素
- for (let i = 0, il = arr[0].length; i < il; i++) {
- for (let j = 0, jl = arr[1].length; j < jl; j++) {
- tmp.push(`$ {
- arr[0][i]
- }
- $ {
- arr[1][j]
- }`)
- }
- }
- // 从 0 删除 2 项, 在插入一项
- // 把前 2 个元素扔掉, 用临时变量替换, 一直是两两组合
- arr.splice(0, 2, tmp);
- if (arr.length > 1) {
- comb(arr)
- } else {
- return tmp;
- }
- // 最后只返回一个元素
- return arr[0];
- }
- return comb(code);
- }
- console.log(phoneNum("23456"))
- </script>
- </body>
- </HTML>
来源: http://www.jianshu.com/p/c7704eaab406