<!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>
网友评论