1.问题:
输入两个字符串,从第一个字符串中删除第二个字符串中的所有字符串不可以使用replace
例如:输入“They are students” 和“aeiou”
则删除之后的第一个字符串变成 “Thy r stdnts”
分析:
(1)在字符串1中把字符串2中的字母挨个找一遍,所以要遍历字符串2;
(2)将字符串1中出现的字母删掉,用split[split(“指定的字符串”),用来切割字符串中指定的字符串的,返回的是字符串的数组;用谁切割谁就没了];
(3)将返回的数组变为字符串,用join[join用来对数组进行拼接]
法1:最优方案
var str1="They are students";
var str2="aeiou";
for(var index in str2){
str1=str1.split(str2.charAt(index)).join(""); //用str2.charAt(index)将str1中的字符串切割,返回字符串的数组,再用join()进行拼接
}
console.log(str1); //Thy r stdnts
法2:
var str1="They are students";
var str2="aeiou";
var arr=str1.split("");
for(var index in str2){
var s=str2.charAt(index); //即每单个字符;charAt(index)取字符串中的索引;charAt()即根据索引取出索引位所对应的字符,括号里写索引
for(var key in arr){
if(arr[key]===s){ //arr[key]拿到数组里的每个节点的数字或字符
arr.splice(key,1);
}
}
}
console.log(arr.join("")); //Thy r stdnts
知识点:检查代码的运行速度
在代码开始前写console.time(); 代码最后写console.timeEnd();
2.问题:计算字符串中某个字符的个数
例:计算’1231011211009181’中1的个数
var aaa = '1231011211009181';
function selectChar(str){
var count=0;
for(var key in aaa){
if(aaa.charAt(key)===str){ //aaa.charAt(key)取到当前字符
count++;
}
}
return count;
}
console.log(selectChar("0"));
3.问题:找到字符串’woainixiaoli’中的每一个’i’出现的位置
使用indexOf():
语法 | Object(string/array).indexOf(searchValue, fromIndex); |
---|---|
参数1 | 需检索的字符串值 |
参数2 | 规定在字符串中开始检索的位置(包括自身)。若省略,则从字符串的首字符开始检索 |
注 | 返回值是数字(索引),若检索不到,返回-1 |
var arr = 'woainixiaoli';
var index = -1; //定义变量index控制索引值
//当查找不到a,即indexOf()的值为-1时,结束循环
do {
index = arr.indexOf("i", index + 1); //使用第二个参数index+1,控制每一次查找都是从上一次查找到字符a的下一个索引位置开始
if (index != -1) { //可以找到字符i
console.log(index); //输出a的位置
}
} while (index != -1);
4.问题:求字符串’zhaochucichuzuiduodezifu’最多的字符
var str = "nininihaoa";
var o = {};
for (var i = 0, length = str.length; i < length; i++) {
var char = str.charAt(i);
if (o[char]) { //char就是对象o的一个属性,o[char]是属性值,o[char]控制出现的次数
o[char]++; //次数加1
} else {
o[char] = 1; //若第一次出现,次数记为1
}
}
console.log(o); //输出的是完整的对象,记录着每一个字符及其出现的次数
//遍历对象,找到出现次数最多的字符的次数
var max = 0;
for (var key in o) {
if (max < o[key]) {
max = o[key]; //max始终储存次数最大的那个
}
}
for (var key in o) {
if (o[key] == max) {
//console.log(key);
console.log("最多的字符是" + key);
console.log("出现的次数是" + max);
}
}
5.问题:实现函数的连用
例:add(1)(2)(3)… 参数之和
考点:递归、闭包、重写方法
function add(num){
var a=num;
var t=function (x){
a=a+x;
return t;
};
//重写toString() 自动执行 重写方法
t.toString=function (){
return a;
}
return t;
}
console.log(add(1)(2)(3)(4));
6.问题:数组的去重
分析:用枚举对象来做,因为一个对象的行为和属性都是固定的,可以把数组里的值看作元素对象的属性,如下数组中1是一个属性,再来一个1就重了,重了就可以去掉
var a = [1, 2, 3, 4, 1, 2, 3, 1, 2];
var obj = {}; //定义一个空对象
for (var key in a) {
/*hasOwnProperty 判断对象里面是否存在属性,返回值为true或false*/
if (!obj.hasOwnProperty(a[key])) {
obj[a[key]] = "";
}
}
var s = []; //定义一个数组
for (var key in obj) {
s.push(key); //将属性名称转为数组
}
console.log(s);
注:数组的key指索引,对象的key指对象里的属性名称
7.问题:不借助第三变量,两个变量交换
var a = 5;
var b = 3;
b = a + b;
a = b - a;
b = b - a;