JS 基本逻辑算法题

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;

8.问题:接受参数n=5,不用for循环输出数组【1,2,3,4,5】

function show(n) {
    var arr = [];
    return (function () {
        arr.unshift(n);
        n--;
        if (n != 0) {
            arguments.callee();
        }
        return arr;
    })()
}
show(5)//[1,2,3,4,5]
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值