递归
函数自己调用自己
迭代
利用原值推算出变量的新值
有递归就一定有迭代,有迭代不一定有递归
console.time("exp");//方法是开始计算时间
console.timeEnd("exp");//是停止计时,输出脚本执行的时间。
两个结合起来可以测量一个javascript脚本程序执行消耗的时间。
【问题一】:
输入两个字符串,从第一个字符串中删除第二个字符串中的所有字符串,不可以使用replace
例如:输入“They are students” 和“aeiou”。 则删除之后的第一个字符串变成 “Thy r stdnts”
var str = "They are students";
var sen = "aeiou";
function deleteChar(s1, s2) {
if (s2.length < 1) {
return s1;
}
for (var i = 0; i < s2.length; i++) {
s1 = s1.split(s2[i]).join("")
}
return s1;
}
console.log(deleteChar(str, sen));
其中
【问题二】:
将字符串转换成驼峰命名法
例如 get-element-by-id 变成 getElementById
var m1 = "get-element-by-id";
function changeStr(args) {
var arr = args.split("-");
var str = "";
for (var i = 0; i < arr.length; i++) {
if (i > 0) {
str += arr[i].charAt(0).toUpperCase() + arr[i].substr(1, arr[i].length - 1).toLowerCase();
}
else {
str += arr[i].toLowerCase();
}
}
return str;
}
console.log(changeStr(m1));
【问题三】:
阶乘算法
例如!4 123*4
递归
function JIecheng(num) {
if (num == 1) {
return 1;
}
return num * JIecheng(num - 1);
}
console.log(JIecheng(5));
1
2
3
4
5
6
7
8
【问题四】:
编制一个从字符串中收集数字字符(“0”’,“1”,…“9”)的函数CollectDigits(s),它从字符串s中顺序取出数字,并且合并为一个独立的字符串作为函数的返回值。例如函数调用CollectDigits(“1abc23def4”)的返回值是字符串"1234"。
var k1 = "1abc23def4";
function CollectDigits(str) {
var char = null;
var s = "";
for (var i = 0; i < str.length; i++) {
char = str.charAt(i);
if (!isNaN(char)) {
s += char;
}
}
return s;
}
console.log(CollectDigits(k1));
注意:isNaN() 函数用于检查其参数是否是非数字值。
如果参数值为 NaN 或字符串、对象、undefined等非数字值则返回 true, 否则返回 false。
故 !isNaN 用来筛选是数字的元素
【问题五】:
编制一个将两个字符串交叉合并的函数Merge(s1,s2),例如Merge(“123”,“abc”)的返回结果是"1a2b3c",如果两个字符串的长度不同,那么就将多余部分直接合并到结果字符串的末尾,如Merge(“123456”,’‘abc’’)的返回结果是”1a2b3c456”。
function Merge(s1, s2) {
var str = "";
for (var i = 0; i < s1.length; i++) {
str += s1[i] + (s1.length == i + 1 ? s2.substr(i, s2.length - i) : s2[i] ? s2[i] : "");//??????
}
return str;
}
console.log(Merge("123456", "abc"));
【问题六】:
重复输出一个给定的字符串(str第一个参数)n 次 (num第二个参数)。如果第二个参数num不是正数的时候,返回空字符串。
function meter(str, num) {
if (num < 1) {
return "";
}
var s = "";
var count = 0;
while (count < num) {
count++;
s += str;
}
return s;
}
console.log(meter("abc", 7));//
console.log(meter("abc", -1));//
【问题八】:
https://www.baidu.com?name=zhiyelee&blog=www.tsnrose.com 路径解析值
解析成对象格式
var src = "https://www.baidu.com?name=zhiyelee&blog=www.tsnrose.co";
function changeUrl(url) {
var arr = url.split("?");
var params = arr[1].split("&");
var obj = {};
for (var i = 0; i < params.length; i++) {
var array = params[i].split("=");
obj[array[0]] = array[1];
}
return obj;
}
console.log(changeUrl(src));