在刚面完字节时有一道题目让我得到了面试官的好评就是反转字符串我说了6中方法
1.通过类型转换将字符串转为数组,再通过reverse 反转成功代码是
function reverseStr(str){
if(typeof != string)
return str.split('').reverse().join('');
}
console.log(reverse'abc')
这是最常见的方法
我们可以换一个思路,字符串反转只有将字符串的第一个变成最后一个如此重复?对于一个重复的简单问题我们可以使用递归的思路,我们通过循环的思想去将事件完成,
我给出实例代码如下
function reverseStr(str){
if (str=''){
return ''
}else{
return reverse(str.sbu(1))+str.chAt(0);
}
console.log(reverse('abcsfdfg'));
这个就是我们对于算法的感受不是让别人觉得我们是背算法而是应用算法,也是综合素质高于别人的表现
对于这种重复的事情我们也会天然的想起for循环将我们的数组
function resverStr(str){
let revered = '';
for(let i = str.length-1,i>0,i--){
reverse+ = str;
return revered}
}
coonsole.log(resverStr('asdfghj'))
还有一个api在es6中新加的是展开运算符[...str]还有一个reduce高阶函数
functionreverseStr(str){
return [...str].reduce((reversed,char)=>char+reversed,'')
}
在这里我详细介绍一下reduce
reduce
是一种高阶函数,常见于支持函数式编程的语言或库中(例如JavaScript中的Array.prototype.reduce方法、Python的functools.reduce等)。它用于将一个数据集合(如数组)累积地减少为单个值。reduce
函数通常接受两个参数:
- 累加器函数:这个函数会被多次调用,每次接收两个参数——累加器(累积结果)和当前元素。该函数负责决定如何结合这两个值,并返回新的累积结果。
- 初始值:作为第一次调用累加器函数时累加器的初始值。
工作原理
以JavaScript为例,假设有如下代码:
javascript
深色版本
const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
这里,numbers
数组通过 reduce
方法被累积成一个单一数值 sum
。累加器函数 (accumulator, currentValue) => accumulator + currentValue
将数组中的每个元素依次相加。初始值设为 0
,确保了累加从零开始。
应用场景
- 聚合操作:如上述例子所示,
reduce
可以用来对数组中的所有元素进行求和、计算乘积等。 - 转换结构:可以将一组数据转换为另一种结构,比如将多个对象合并到一个对象中,或将列表转换为字典(映射)。
- 过滤与处理:虽然有专门的
filter
和map
函数更适合这些任务,但reduce
也可以实现类似的功能,同时提供更大的灵活性。
educe
方法详解
-
numbers.reduce(...)
:对numbers
数组调用reduce
方法。 -
(accumulator, currentValue) => accumulator + currentValue
:这是传递给reduce
的累加器函数(也称为回调函数)。它接收两个参数:accumulator
:累加器,用于累积回调函数的返回值。在第一次调用时,它的值是提供的初始值(在这个例子中为0)。currentValue
:当前正在处理的数组元素。
这个箭头函数简单地将
accumulator
与currentValue
相加,并返回结果作为新的累加值。有了这一段解释这个方法就让我得到了面试官的大拇指
function reverseStr(str) {
let reversed = "";
//1. const char
:声明一个常量char,在每次循环中,它会被赋值为当前遍历到的元素
- 使用const表示char在每次循环中不能被重新赋值
for (const char of str) { //const char of str 表示从字符串 str 中依次取出每个字符,并将其赋值给常量 char。 reversed = char + reversed; } return reversed; }
- 这个循环会依次访问字符串中的每个字符
- 对于字符串
"hello"
,char会依次被赋值为:'h', 'e', 'l', 'l', 'o' - 每次循环执行循环体内的代码
还有一个方法正则表达式 function reverseStr(str){ //正则表达式 . 任意字符 return str.replace(/./g, (char)=>char).split('').reverse().join('') } console.log(reverseStr('abc')); 这个方法其实不是很实用但是这是给面试官秀肌肉的操作 function revereStr(str){ return [...str].map(char=>char).reverse().join('') } 这个方法更实用通过map方法映射到反转字符串 "abc" -> ['a', 'b', 'c'] -> ['c', 'b', 'a'] -> "cba"