前端面试:手写代码JS实现字符串反转
前端萌新面试:手写代码JS实现字符串反转
前言
因为做前年小红书的前端校招面试题,发现出现好几道关于字符串对象和数组对象的题目,说难不难,但突然要写的话一时想不起来,这不想着做个小总结。
首先明白字符串是不可变的,不可变的字符串数据类型要实现动态反转,需要借助数组来实现
知识点
String对象:
split():把字符串分割成字符串数组(split()不改变原始字符串)
stringA.split(separator,limitArrayLength)
看似复杂的参数,其实它们都是可选值
separator
分隔符,可选项,意思是stringA
要以什么样的分隔符作为标识分隔
limitArrayLength
可选项,指定返回的数组的最大长度
split()
方法相当于是将string对象转变成Array对象split("")
相当于["how are you"]
=>['h', 'o', 'w', ' ', 'a', 'r', 'e', ' ', 'y', 'o', 'u']
,字符默认一个一个分割split()
相当于["how are you"]
=>['how are you']
,相当于将字符串对象转化为数组对象split(" ")
相当于["how are you"]
=>['how', 'are', 'you']
,以空格作为分割符split("o", 3)
相当于["how are you doing in this morning?"]
=>['h', 'w are y', 'u d']
,以字母o
作为分割符,返回数组长度为3
charAt():返回指定位置的字符,从0开始
stringA.charAt(index)
,index
必需项,字符索引
Array对象:
reverse():用于颠倒数组中元素的顺序
join():用于把数组中所有元素转换连接成一个字符串
ArrayA.join(separator)
看似复杂的参数,其实它们都是可选值
separator
可选项,指定要使用的分隔符,默认使用逗号分割
join()
方法相当于是将Array对象转变成string对象join("")
相当于["red", "pink", "black"]
=>redpinkblack
,可以这样理解,有设置分隔符,分隔符无join()
相当于["red", "pink", "black"]
=>red,pink,black
,默认使用逗号分割
JavaScript中字符串和数组的区别:
- JavaScript中字符串是不可变的,数组是可变的
字符串不可变是指字符串对象的操作方法不会改变其原始值,而是创建并返回一个新的字符串
数组对象的操作方法都是在其原始值上操作的
- 数组有
reverse()
方法
个人理解是正是因为字符串没有
reverse()
方法,所以才要通过转化为数组来实现
三种实现方法
使用字符串和数组的成员函数实现
function getStr(string) {let newStr = string.split("").reverse().join(""); //详细解释见前知识点部分return newStr;
}
console.log(getStr("hello world!"));//!dlrow olleh
利用for语句反向遍历字符串,只用charAt()
方法
function getStr2(string) {var newStr = [];for (let i = string.length - 1, j = 0; i >= 0; i--, j++) { //j => newStr, i => stringnewStr[j] = string[i];};return newStr.join("");
}
console.log(getStr2("abcdef"));//fedcba
只用join()
方法
function getStr3(string) {if (string.length == 0) return null;var i = string.length;var dstr = "";while (--i >= 0) {dstr += string.charAt(i);}return dstr;
}
console.log(getStr3("fedcba"));//abcdef
最后
代码实现是次要的,主要是大脑理解和运用它们,代码千变万化,AI也必然会剔除一些初级、基础不扎实的程序员,归根结底还是扎根万变不离其宗的知识内化于心,写出不轻易被AI取代的个人代码
前端面试:手写代码JS实现字符串反转相关推荐
- 2022必会的前端面试手写题
前端面试题视频讲解 将数字每千分位用逗号隔开 数字有小数版本: let format = n => {let num = n.toString() // 转成字符串let decimals = ...
- 前端date format_前端面试-手撕代码篇
前言 在前端面试有一个非常重要的环节,也是面试者最担心的一个环节.对"手撕代码"的考察需要面试者平时总结和积累(临时抱佛脚是不好使的),在这里笔者就自己如何攻破"手撕代码 ...
- 前端面试手写题汇总大全(含答案)-- 持续更新
高频 一. 柯里化函数(Currying)和反柯里化 简介 柯里化(Currying),又称部分求值(Partial Evaluation),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第 ...
- zen-coding for notepad++,前端最佳手写代码编辑器
zen-Coding是一款快速编写HTML,CSS(或其他格式化语言)代码的编辑器插件,这个插件可以用缩写方式完成大量重复的编码工作,是web前端从业者的利器. zen-Coding插件支持多种编辑器 ...
- java数据结构与算法面试,java面试手写代码
前言 总有一天你会明白,你的努力终究没有白费 年前辞职,人算不如天算,突如其来的疫情完全把自己的计划给打碎了,面试难度简直不亚于一场江苏高考题,后悔.焦虑不安.失眠成了我的生活状态. 从三月底开始投递 ...
- 2020年前端面试之JS手写代码题合集
2020年前端面试之JS手写代码题合集 预计会有上千道题,后续慢慢补! 1. 写一个把字符串大小写切换的方法 function caseConvert(str){return str.replace ...
- 【面试题】 「中高级前端面试」JavaScript手写代码无敌秘籍
大厂面试题分享 面试题库 前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 1. 实现一个new操作符 new操作符做了这些事: 它创建了一个全新的对象. 它会被执行[[Proto ...
- 前端面试高频手写代码题
前端面试高频手写代码题 一.实现一个解析URL参数的方法 方法一:String和Array的相关API 方法二: Web API 提供的 URL 方法三:正则表达式+string.replace方法 ...
- 2021-最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)---手写代码篇
★★★ 手写代码:实现forEach map filter reduce ★★★ 手写实现一个简易的 Vue Reactive ★★★ 手写代码,监测数组变化,并返回数组长度 ★★★ 手写原生继承,并 ...
最新文章
- boost::astar_search用法的测试程序
- KERNELRELEASE
- 结巴分词关键词相似度_gensim和jieba分词进行主题分析,文本相似度
- 强烈推荐给从事IT业的同行们 (转载)
- 使用sqlite3创建数据库表的时候须要注意
- Latex 中插入超链接 插入网址
- 乌班图系统修改服务器时间的命令,ubuntu 修改系统时间无效
- SAP物料批次管理配置及操作手册
- 软件评测师备考经验分享
- 【计算技巧】分数复数的共轭--分数复数模的平方计算技巧
- 计算机无法登陆提示rpc服务器不可用,电脑提示RPC服务器不可用的解决方法
- 计算机硬件连接子系统,网络综合布线七大子系统详细讲解
- 扒一扒最近很火的被马云强东联手封杀性感女黑帽
- 生活总结[置顶] 程序员的奋斗史(十八)——人活着,只是一种态度
- NumPy基础之大作业(Iris数据分析)
- 高通 qca-wifi 移植
- WPF 基本控件的介绍
- ABI (Application Binary Interface)解析
- TWRP / android 四清三清双请概念
- android 换行符 编码_android中的常见的占位符及转义字符