前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JS不使用替换进行替换

JS不使用替换进行替换

作者头像
我不是费圆
发布2020-12-17 11:18:23
6.6K0
发布2020-12-17 11:18:23
举报
文章被收录于专栏:鲸鱼动画鲸鱼动画
在这里插入图片描述
在这里插入图片描述

  首先我们从题意中可以读出:“不能使用比较、查找、替换”函数,也就是说我可以使用分割、组合方法。 于是我写出了如下代码:

代码语言:javascript
复制
  var str = "我喜欢南极和北极,喜欢荒漠大戈壁";
  str = str.split('');
  console.log(str.join(''));
  for(var i=0;i<str.length;i++){
  	var temp = str[i]+str[i+1];
  	if(temp=="喜欢"){
  	  str[i]="讨";
  	  str[i+1]="厌";
  	}
  }
  console.log(str.join(''));

 这里就不多做赘述了,两两组合在一起,如果组合后等于“喜欢”,那就替换为“讨厌”,之所以添加到数组中是方便组合数组,如果不添加数组,组合数组和字符串的话又增加了一层难度。输出结果是这样的:

在这里插入图片描述
在这里插入图片描述

  那,我们来读一读第二问: 以上程序是否总能正常输出,如果不能,列出哪种情况下无法正常输出结果,尽可能详细和全面。   那,读到这里我就明白了:这道题是没有准确答案的,你只要写出来任何一种,就能得分,你编写的程序越完善,得分就越高。   而我刚刚写下的这种方法有明显的弊端,那就是每次更换字符串,我都需要重新编写程序,于是我写下了第二种:

代码语言:javascript
复制
  var str = "我喜欢南极和北极,喜欢荒漠大戈壁";
  var ent = "喜欢";
  var out = "讨厌の";
  str = str.split('');
  console.log(str.join(''));
  for(var i=0;i<str.length;i++){
  	var temp = "";
  	for(var j=0;j<ent.length;j++){
  	  temp+=str[i+j];
  	}
  	console.log(temp);
  	if(temp===ent){
  	  for(var k=0;k<ent.length;k++){
  	  	str[i+k]=out[k];
  	  }
  	}
  }
  console.log(str.join(''));

  优化的结果是:无论需要被替换的字符串B有多长,我都可以用C进行替换,多余的B会被 “” 空字符所代替。但这套程序也有一个十分明显的弊端:如果C 的长度大于B ,只能替换掉 C.length 的 B,之后我开始写第三种方案:

代码语言:javascript
复制
  var str = "我喜欢南极和北极,喜欢沙漠大戈壁";
  var ent = "我喜欢";
  var out = "我没见过";
  console.log(str);
  str = str.split('');
  // console.log(str);
  for(var i=0;i<str.length;i++){
    var temp ="";
    for(var k=0;k<ent.length;k++){
      temp += str[i+k];
    }
      // console.log(temp);
    if(temp===ent){
      for(var j=0;j<ent.length;j++){
        str[i+j] = out[j];
        if((j+1)>=ent.length){
          for(var l=j+1;l<out.length;l++){
            // l=j+1 因为str[i+j]中已经存入了一个字符out[j]
            str[i+j] += out[l];
          }
        }
      }
    }
  }
在这里插入图片描述
在这里插入图片描述

  这次的方案看上去比较完美,基本无懈可击,但我在C里面加入了\n,我发觉它换行了,于是我写下了这样一段话:能正常输出,但不要定义这样的字符串"换行\n",在我看来,所有的程序都难以十全十美,只有熟练掌握JS脚本语言,才能适应飞速发展的前端,各种框架类层出不穷,组件日新月异,唯有熟读脚本语言,能编写各种算法,才能算是真正的博览群书。   我很幸运,得到了面试官的赏识,至于第二题,我用高中数学求出来了一些数值,但是具体的坐标我无能为力,最后因为学历问题,我与该企失之交臂,有遗憾也有收获,我把第二题的一些浅见写在这里,如果感兴趣,可以阅读:


在这里插入图片描述
在这里插入图片描述

  因为绕Z轴旋转,而不是随意旋转,可以断定Z2=Z3,如果对这点有异议,可以参照前端的transform:rotateX();transform:rotateY();transform:rotateZ();   又因为x轴和y轴屏幕投影为30°,所以角cab=30°,如果对这点有异议,可以参照“搜狗问问”“知乎”“百度文库”,若不服可以在评论去骂街;   因为∠cab=30° ,所以sinA=1/2,那线段bc的长度是ac的一半,而ac与ab相等,因此 ab = ac = 2bc;   根据三角函数,a²+b²=c²,我能求出BC的长,那AB的长我也得出来了; 现在已知A点坐标与B点坐标,又已知线段AB、BC、CA的长度,且已知C点在Z轴上的坐标,且∠cab=30°、根据三角形内角和180°,且等边等角原理,可知∠abc = ∠acb = 75°,那么请求出 C 点的坐标,可以把写法留言在评论区,本人常在。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-10-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档