1.字符串翻转
具体代码:
function reverseString(str) {
// 请把你的代码写在这里
str = str.split("").reverse().join('');
return str;
}
reverseString("hello");
涉及知识点:
String.split()中,将一个字符串每一个字符进行切割,写法是: String.split('')
Array.join(),将数组按照传入的字符进行连接成为一个字符串
2.求阶乘
具体代码:
function factorialize(num) {
// 请把你的代码写在这里
if(num === 0){
return 1;
}else{
return factorialize(num - 1)*num;
}
return num;
}
factorialize(5);
涉及知识点: 未涉及到过多的js语法,只是需要采用递归,找到递归边界即可,当然也可以采用将所有数放到一个数组里进行循环
3.求回文数
问题描述:检查回文字符串
如果给定的字符串是回文,返回
true
,反之,返回false
。
如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。
注意你需要去掉字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是否为回文。
函数参数的值可以为
"racecar"
,"RaceCar"
和"race CAR"
。
具体代码:
function palindrome(str) {
// 请把你的代码写在这里
str = str.replace(/[\s|\~|`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\||\|\[|\]|\{|\}|\;|\:|\"|\'|\,|\<|\.|\>|\/|\?]/g, '');
str = str.toLowerCase();
if(str == str.split('').reverse().join(''))
return true;
else
return false;
}
palindrome("eye");
涉及知识点:
string.replace()方法 和java略有区别,在js中可以直接在第一个参数写上正则表达式,而java中需要加"",第二个参数都是替换的字符.
正则表达式中的几个小点:
- 最左边的/代表正则表达式的头部
- []表示定义匹配的字符范围,其中在正则表达式中三种括号的区别见这篇文章:正则表达式(括号)、[中括号]、{大括号}的区别小结
- \s 表示匹配所有空格 换行 制表符在内的所有空白,其余都是标点的转义字符
- /g表示全局,代表是替换所有而不是第一个
4.求最长单词长度
问题描述:在句子中找出最长的单词,并返回它的长度。
具体代码:
function findLongestWord(str) {
// 请把你的代码写在这里
var result = 0;
var strArr = str.split(' ');
strArr.map(function(val){
if(val.length > result) result = val.length;
});
return result;
}
findLongestWord("The quick brown fox jumped over the lazy dog");
涉及知识点:
- arr.map可以遍历数组中所有值
5.单词首字母大写转换
句中单词首字母大写
确保字符串的每个单词首字母都大写,其余部分小写。
具体代码:
function titleCase(str) {
// 请把你的代码写在这里
var arr = str.split(' ');
var resultArr = arr.map(function(val){
var wordArr = val.toLowerCase().split('');
wordArr[0] = wordArr[0].toUpperCase();
return wordArr.join('');
});
return resultArr.join(' ');
}
titleCase("I'm a little tea pot");
涉及知识点:
- 处理逻辑为:先所有都小写 然后首字母大写
- 注意arr.map类似于java8中的stream流中的map,如果内部函数返回一个值,将所有返回的值作为新数组的元素
6.找到多个数组中的最大值
问题描述:
找出多个数组中的最大数
右边大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组。
具体代码:
function largestOfFour(arr) {
// 请把你的代码写在这里
var result = [];
for(var i=0; i<arr.length; i++){
var sortArr = arr[i].sort(function(a, b){
return a < b;
});
result.push(sortArr[0]);
}
return result;
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
7.检查字符串结尾
问题描述:判断一个字符串(str
)是否以指定的字符串(target
)结尾。如果是,返回true;如果不是,返回false。
具体代码:
function confirmEnding(str, target) {
// 请把你的代码写在这里
str = str.substr(str.length-target.length, str.length);
return str===target;
}
confirmEnding("Bastian", "n");
涉及知识点:
- 字符串substr方法是用来截取字符串的 同样输入进去的两个index是左闭右开的
- === 严格相等
8.重复输出字符串
具体代码:
function repeat(str, num) {
// 请把你的代码写在这里
//暂存str
var tmp = str;
//清空str
str = '';
if(num < 0){
return "";
}else{
while(num > 0){
str += tmp;
num--;
}
return str;
}
}
repeat("abc", 3);
9.截断字符串
问题描述:
截断字符串(用瑞兹来截断对面的退路)如果字符串的长度比指定的参数num
长,则把多余的部分用...
来表示。
切记,插入到字符串尾部的三个点号也会计入字符串的长度。但是,如果指定的参数num
小于或等于3,则添加的三个点号不会计入字符串的长度。
具体代码:
function truncate(str, num) {
// 请把你的代码写在这里
if(str.length <= num){
return str;
}else{
if(num <= 3){
str = str.substr(0, num);
str += '...';
}else{
str = str.substr(0, num-3);
str += '...';
}
return str;
}
}
truncate("A-tisket a-tasket A green and yellow basket", 11);
涉及知识点:
- slice() 和 substr() 具有相同的作用 用法也相同
10.分割数组
问题描述:把一个数组arr
按照指定的数组大小size
分割成若干个数组块。
具体代码:
function chunk(arr, size) {
// 请把你的代码写在这里
var result = [];
for(var i=0; i<arr.length; i+=size){
var tmp = arr.slice(i, i+size);
result.push(tmp);
}
return result;
}
chunk(["a", "b", "c", "d"], 2);
涉及知识点:
- slice方法不仅可以分割字符串还可以分割数组
11.截断数组
问题描述: 返回一个数组被截断n
个元素后还剩余的元素,截断从索引0开始。
具体代码:
function slasher(arr, howMany) {
// 请把你的代码写在这里
return arr.slice(howMany, arr.length);
}
slasher([1, 2, 3], 2);
涉及知识点:
- splice()方法 可以直接对数组进行增删,第一个参数是开始位置,第二个参数如果是删则将中间参数其设为需要删的个数,如果不删则将中间参数其置为0,如果需要增则在后面带上需要增加的元素,可以有多个splice方法介绍
12.比较字符串
问题描述:如果数组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true。
举例,["hello", "Hello"]
应该返回true,因为在忽略大小写的情况下,第二个字符串的所有字符都可以在第一个字符串找到。
["hello", "hey"]
应该返回false,因为字符串"hello"并不包含字符"y"。
["Alien", "line"]
应该返回true,因为"line"中所有字符都可以在"Alien"找到。
具体代码:
function mutation(arr) {
// 请把你的代码写在这里
//忽略大小写
var str1 = arr[0].toLocaleLowerCase();
var str2 = arr[1].toLocaleLowerCase();
var str2Arr = str2.split('');
// 返回一个true 和 false 的数组
var resultArr = str2Arr.map(function(val){
if(str1.indexOf(val) == -1){
return false;
}
return true;
});
for(var i=0; i<resultArr.length; i++){
if(resultArr[i] === false){
return false;
}
}
return true;
}
mutation(["hello", "hey"]);
涉及知识点:
- 字符串大小写的转换 字符串大小写转换博客
- 对数组的操作map返回的也是一个数组,数组的内容是内部函数中return的东西
13.过滤数组的假值
问题描述:在JavaScript中,假值有false
、null
、0
、""
、undefined
和 NaN
。
具体代码:
function bouncer(arr) {
// 请把你的代码写在这里
return arr.filter(function(val){
return Boolean(val).valueOf();
});
}
bouncer([7, "ate", "", false, 9]);
涉及知识点:
- Arrays.filter() 可以进行过滤并返回过滤后的数组
- Boolean对象可以通过构造函数对假值进行处理,其自带方法valueOf()返回的是一个boolean基础对象,具体Boolean对象介绍可以查看Boolean对象介绍
14.摧毁数组
问题描述:实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值。
具体代码:
function destroyer(arr) {
// 请把你的代码写在这里
var result = arguments[0];
//var arr1 = [...arguments]; //这一种写法也可以
//需要注意 如果直接将arr传入到filter的回调函数中去的话时不可以的
var arr1 = Array.from(arguments);
return result.filter(function(val){
var bool = true;
for(var i=1; i<arr1.length; i++){
if(val == arr1[i]){
bool = false;
break;
}
}
return bool;
});
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
涉及知识点:
- 利用Arguments对象可以来接收参数,可以直接通过下标来接收,也可以将其转换为一个真实数组,Arguments对象介绍,特别注意filter,没有转成真实数组直接使用上面的arr进入filter是不成功的
15.数组排序并找出元素索引
问题描述:
先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。
举例:where([1,2,3,4], 1.5)
应该返回 1
。因为1.5
插入到数组[1,2,3,4]
后变成[1,1.5,2,3,4]
,而1.5
对应的索引值就是1
。
同理,where([20,3,5], 19)
应该返回 2
。因为数组会先排序为 [3,5,20]
,19
插入到数组[3,5,20]
后变成[3,5,19,20]
,而19
对应的索引值就是2
。
function where(arr, num) {
// 请把你的代码写在这里
arr.push(num);
var result = arr.sort(function(a, b){
return a > b;
});
var index = 0;
for(var i=0; i<result.length; i++){
if(num === arr[i]){
index = i;
break;
}
}
return index;
}
where([5, 3, 20, 3], 5);
涉及知识点:
- Array.sort排序的用法
16.凯撒密码
问题描述:
下面我们来介绍风靡全球的凯撒密码Caesar cipher
,又叫移位密码。
移位密码也就是密码中的字母会按照指定的数量来做移位。
一个常见的案例就是ROT13密码,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔ 'O',以此类推。
写一个ROT13函数,实现输入加密字符串,输出解密字符串。
所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,跳过它们。
具体代码:
function rot13(str) { // LBH QVQ VG!
// 请把你的代码写在这里
var result = '';
for(var i=0; i<str.length; i++){
var codeNum = str.charCodeAt(i);
if(codeNum >= 65 && codeNum <= 90){
//代表是需要转换的字母
codeNum += 13;
if(codeNum > 90){
codeNum = codeNum - 90 + 65 - 1;
}
}
result += String.fromCharCode(codeNum);
}
return result;
}
rot13("SERR PBQR PNZC"); // 你可以修改这一行来测试你的代码
涉及知识点:
- str.charCodeAt(i)是将字符串第i为字符转为ascii码对应数字
- String.fromCharCode(codeNum)是将对应数字转化为字符,但是需要注意不能传入一个数组进去