题目点评

字符串作在程序中是非常常见的,因为程序中绝大部分的数据都可以当作字符串来处理。需要对字符的处理方法比较熟悉,在回答的时候尽量能够说出多种解决方法更好!

字符串翻转的方法

1)使用字符串函数

  1. //str=hello
  2. function reverseString(str) {
  3. var array = str.split('');//['h','e','l','l','o'];
  4. array = array.reverse();// ['o','l','l','e','h'];
  5. str = array.join('');//"olleh"
  6. return str;
  7. }

上面代码可以合并一行代码

  1. //str=hello
  2. function reverseString(str) {
  3. return str.split('').reverse().join('');;
  4. }

2)使用for循环

  1. function reverseString(str) {
  2. var newStr="";
  3. for(var i=str.length-1;i>=0;i--){
  4. newStr+=str[i];
  5. }
  6. return newStr;
  7. }

使用逆序遍历字符串,从后面将字符串累加起来。
3)使用递归

  1. function reverseString(str) {
  2. if (str === "") {
  3. return "";
  4. } else {
  5. return reverseString(str.substr(1)) + str.charAt(0);
  6. }
  7. }
  8. reverseString("hello"); // => olleh

第一部分的递归方法。你需要记住,你不会只调用一次,你将会有几个嵌套的调用。

每次调用str === "?"

reverseString(str)

+ str.charAt(0)

第一次调用

reverseString("Hello")

reverseString("ello") + "h"

第二次调用

reverseString("ello")

reverseString("llo") + "e"

第三次调用

reverseString("llo")

reverseString("lo") + "l"

第四次调用

reverseString("lo")

reverseString("o") + "l"

第五次调用

reverseString("o")

reverseString("") + "o"

第二部分的递归方法。

每次调用

返回

第五次调用

reverseString("") + "o" = "o"

第四次调用

reverseString("o") + "l" = "o" + "l"

第三次调用

reverseString("lo") + "l" = "o" + "l" + "l"

第二次调用

reverserString("llo") + "e" = "o" + "l" + "l" + "e"

第一次调用

reverserString("ello") + "h" = "o" + "l" + "l" + "e" + "h"

上面的方法还可以继续改良一下,改成三元操作符:

    1. function reverseString(str) {
    2. return (str === '') ? '' : reverseString(str.substr(1)) + str.charAt(0);
    3. }
    4. reverseString("hello"); // => olleh

Web前端面试指导(二十):JavaScript中如何翻转一个字符串?的更多相关文章

  1. Web前端面试指导(十):元素定位有哪些?

    本题点评 在web前端中,元素定位是必须掌握的,是网页制作的必备技能,也是衡量是否为一个合格的web前端开发的标准之一,在网页设计中,很多地方都需要使用定位,例如菜单弹出,提示信息层等都需要定位.所以 ...

  2. Web前端面试指导(九):盒子模型你是怎么理解的?

    问题分析 这道题问得比较宽泛,一定要找准切入点,如果切入点找不准,很容易乱答,甚至答偏,所以找准切入点是非常的重要的. 解答思路 1)盒子模型有两种,W3C和IE盒子模型 (1)W3C定义的盒子模型包 ...

  3. Web前端面试指导(十二):::before 和:before有什么区别?

    题目点评 这个问题看来很简单,但如果之前没有琢磨这个问题,给人感觉也是门头一垂,听到这个题目就懵逼了,因为原来从来没有注意过这个问题,即便有注意这个问题也不能很好的回答清楚.回答的技巧就是从相同点和不 ...

  4. Web前端面试指导(十九):CSS样式-如何清除元素浮动?

    题目点评 本题属于比较常问的题目,也是在网页设计中经常遇到的问题,面试官希望通过这样的面试题来了解你对网页设计的基本功底,如果这样的题目答不出来,必会让面试官大失所望,面试成功的概率是非常小的. 答题 ...

  5. Web前端面试指导(十四):如何居中一个元素(正常、绝对定位、浮动元素)?

    题目点评 这道题目的提问比较多,连续问了三个问题,正常元素.绝对定位元素.互动元素如何居中,而且居中没有说清楚是垂直居中还是水平居中,要回答清楚这个问题,必须得有深厚的功底,而且要分类的来回答,条理要 ...

  6. Web前端面试指导(十八):用纯CSS创建一个三角形的原理是什么?

    题目点评 三角形的图标在网页设计是很常见的,属于基本常识题,只要在练习做到过这个功能都能回答出来,可以把你做过的思路描述出来就可以了,本题的难易程度为简单 答题要点 1.采用的是均分原理 盒子都是一个 ...

  7. Web前端面试指导(十五):CSS样式-display有哪些作用?

    题目点评 其实就是要你说清楚该属性有哪些值,每个值都有什么作用,这个题目可以答得很简单,但要答全也并非是一件容易的事情. 元素默认的display值的情况如下(这个一般很少人注意这一点) block( ...

  8. Web前端面试指导(十六):为什么要初始化CSS样式?

    题目点评 这个题目乍一看感觉怪怪的,什么叫初始化样式了?如果换一句话你可能就理解了,就是通用样式.这道题目主要涉及的是理论方面的知识,不用写代码,只要描述清楚就可以了 初始化样式的原因 因为浏览器的兼 ...

  9. web前端面试总结(二)

    这段时间大大小小面试确实不少,相对之前那篇被虐到体无完肤这几次确实相对来说有很大进步这里总结一下: 1.发现自己,站在个人角度我还是挺赞成出去面试的,不管你对现在的公司是否满意,当你觉得在这里已经有一 ...

随机推荐

  1. 2016级算法第一次练习赛-A.群鸦的盛宴

    858 群鸦的盛宴 题目链接:https://buaacoding.cn/problem/858/index 思路 本题乍一眼看过去,你可能会想到使用一个二维数组A[51][51]来记录从i到j的路线 ...

  2. 1. java 的访问修饰符

    一.什么情况下使用修饰符 属性通常使用private封装起来 方法一般使用public用于被调用 会被子类继承的方法,通常使用protected private protected package p ...

  3. SQL总结----存储过程

    概念 存储过程(Stored Procedure):已预编译为一个可执行过程的一个或多个SQL语句. 创建存储过程语法 CREATE proc | procedure procedure_name [ ...

  4. weex 初始化

    文档教程 一. 已有项目集成weex, 有时候会报错, 因为sdk中用到了socket pod 'WeexSDK' pod 'SocketRocket' 二. 在app启动方法 -didFinish ...

  5. JavaWeb学习笔记(十八)—— DBUtils的使用

    一.DBUtils概述 1.1 什么是DBUtils commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbuti ...

  6. SQL多字段排序

    emm 其实也没什么 就是写sql查询的时候 要对多个字段排序比如  查询原本的数据是 年份 科目 批次 2014 理科 本二2015 理科 本二 2015 理科 本一2016 理科 本二 2016 ...

  7. 2019.04.18 读书笔记 深入string

    整个.net中,最特殊的就是string类型了,它有着引用类型的特性,又有着值类型的操作方式,最特殊的是,它还有字符串池,一个字符串只会有一个实例(等下就推翻!). 鉴于之前的<==与Equal ...

  8. bitset用法

    学习博客:https://www.cnblogs.com/magisk/p/8809922.html C++的 bitset 在 bitset 头文件中,它是一种类似数组的结构,它的每一个元素只能是0 ...

  9. RPC的故事

    今天我跟几个RPC框架之间发生了一些事,情节跌宕起伏一波三折,不吐不快,以至于我这个从来不写博客的人也忍不住写下来分享一下. 背景 主系统部署在Windows上(.NET 4.5),子系统(.NET ...

  10. C++析构函数(转)

    创建对象时系统会自动调用构造函数进行初始化工作,同样,销毁对象时系统也会自动调用一个函数来进行清理工作(例如回收创建对象时消耗的各种资源),这个函数被称为析构函数. 析构函数(Destructor)也 ...