这是一些对你有帮助的资源:
String
Array
Arithmetic Operators
Comparison Operators
Boolean Objects
Arguments object
1.Reverse a String
翻转字符串
先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串。
你的结果必须得是一个字符串
function reverseString(str) {
str = str.split('').reverse().join('');
return str;
}
reverseString("hello");
2.Factorialize a Number
计算一个整数的阶乘
如果用字母n来代表一个整数,阶乘代表着所有小于或等于n的整数的乘积。
阶乘通常简写成 n!
例如: 5! = 1 * 2 * 3 * 4 * 5 = 120
function factorialize(num) {
// 请把你的代码写在这里
var number = 1;
while( num > 0 ){
number *= num;
num --;
}
return number;
}
factorialize(5);
3.Check for Palindromes
如果给定的字符串是回文,返回true,反之,返回false。
如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。
注意你需要去掉字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是否为回文。
函数参数的值可以为"racecar","RaceCar"和"race CAR"。
function palindrome(str) {
// Good luck!
str=str.replace(/[\ |\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\||\\|\[|\]|\{|\}|\;|\:|\"|\'|\,|\<|\.|\>|\/|\?]/g,""); //去除标点符号,这是我百度的,js的正则不是很熟悉
str = str.replace(/\s+/g);
str = str.toLowerCase();
var arr = str.split('');
arr = arr.reverse();
var str1 = arr.join("");
if(str === str1){
return true;}
return false;
}
palindrome("eye");
/*
palindrome("eye") 应该返回一个布尔值
palindrome("eye") 应该返回 true.
palindrome("race car") 应该返回 true.
palindrome("not a palindrome") 应该返回 false.
palindrome("A man, a plan, a canal. Panama") 应该返回 true.
palindrome("never odd or even") 应该返回 true.
palindrome("nope") 应该返回 false.
palindrome("almostomla") 应该返回 false.
palindrome("My age is 0, 0 si ega ym.") 应该返回 true.
palindrome("1 eye for of 1 eye.") 应该返回 false.
palindrome("0_0 (: /-\ :) 0-0") 应该返回 true.
*/
4.Find the Longest Word in a String
找出最长单词
在句子中找出最长的单词,并返回它的长度。
函数的返回值应该是一个数字。
function findLongestWord(str) {
// 请把你的代码写在这里
var splitArr = str.split(" ");
var maxStr = "";
for(var i = 0; i<splitArr.length-1; i++){
if(i != splitArr.length-1){
if(splitArr[i].length>splitArr[i+1].length){
if(splitArr[i].length>maxStr.length){
maxStr = splitArr[i];
}
} else {
if(splitArr[i+1].length>maxStr.length){
maxStr = splitArr[i+1];
}
}
}
}
return maxStr.length;
}
findLongestWord("The quick brown fox jumped over the lazy dog");
5.Title Case a Sentence
确保字符串的每个单词首字母都大写,其余部分小写。(eg:titleCase("I'm a little tea pot") 应该返回 "I'm A Little Tea Pot". titleCase("sHoRt AnD sToUt") 应该返回 "Short And Stout".)
/*这题很简单,主要是要明白 split() 是把字符串分割成数组
join() 是把 数组变成字符串
toLowerCase() toUpperCase() 大小写转换,注意,只对字母有效,其他字符(eg:/,!@)无效
*/
function titleCase(str) {
str = str.split(" ");//按照空格把字符串分割成数组
for (var i = 0; i < str.length; i++) {
str[i] = str[i].toLowerCase();
str[i] = str[i].substring(0, 1).toUpperCase() + str[i].substring(1);
}
return str.join(" ");//通过空格把数组连接成字符串
}
titleCase("I'm a little tea pot");
6.Return Largest Numbers in Arrays
找出多个数组中的最大数
右边大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组。
提示:你可以用for循环来迭代数组,并通过arr[i]的方式来访问数组的每个元素。
function largestOfFour(arr) {
// 请把你的代码写在这里
var newArr = [];
var i = 0;
while(i < arr.length){
var maxNum = 0;
for(var j = 0; j<arr[i].length-1; j++){
if(arr[i][j] > arr[i][j+1]){
if(arr[i][j] > maxNum){
maxNum = arr[i][j];
}
} else {
if(arr[i][j+1] > maxNum){
maxNum = arr[i][j+1];
}
}
}
i++;
newArr.push(maxNum);
}
return newArr;
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
7.Confirm the Ending
检查一个字符串(str)是否以指定的字符串(target)结尾。
如果是,返回true;如果不是,返回false。
例如:confirmEnding("Bastian", "n") 应该返回 true. confirmEnding("Connor", "n") 应该返回 false. confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "specification") 应该返回 false.
function confirmEnding(str, target) {
// "Never give up and good luck will find you."
// -- Falcor
return str.substr(str.length-target.length) == target ? true:false;
}
confirmEnding("Bastian", "n");
confirmEnding("He has to give me a new name", "na");
/*
confirmEnding("Bastian", "n") 应该返回 true.
confirmEnding("Connor", "n") 应该返回 false.
confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "specification") 应该返回 false.
confirmEnding("He has to give me a new name", "name") 应该返回 true.
confirmEnding("He has to give me a new name", "me") 应该返回 true.
confirmEnding("He has to give me a new name", "na") 应该返回 false.
confirmEnding("If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing", "mountain") 应该返回 false.
*/
8.Repeat a string repeat a string
重要的事情说3遍!
重复一个指定的字符串 num次,如果num是一个负数则返回一个空字符串。例如:
repeat("", 3) 应该返回"*".
repeat("abc", 3) 应该返回"abcabcabc".
repeat("abc", 4) 应该返回"abcabcabcabc".
repeat("abc", 1) 应该返回"abc".
repeat("", 8) 应该返回"********".
repeat("abc", -2) 应该返回"".
当你完成不了挑战的时候,记得开大招'Read-Search-Ask'。
这是一些对你有帮助的资源:
•Global String Object
function repeat(str, num) {
// repeat after me
var newstr = str;
if(num >1){
for(var i = 1; i< num ; i ++){
str +=newstr;
}
return str;
}else if(num == 1){
return str;
}else{
return "";
}
}
repeat("abc", 3);
repeat("*", 3);
9.Truncate a string
截断字符串(用瑞兹来截断对面的退路)
如果字符串的长度比指定的参数num长,则把多余的部分用...来表示。
切记,插入到字符串尾部的三个点号也会计入字符串的长度。
但是,如果指定的参数num小于或等于3,则添加的三个点号不会计入字符串的长度。
function truncate(str, num) {
// 请把你的代码写在这里
if(str.length > num){
if (str.length - num >= 30){
return str.slice(0, num - str.length -3) + "...";
}else {
return str.slice(0, num - str.length) + "...";
}
}
return str;
}
truncate("A-tisket a-tasket A green and yellow basket", 11);
10.Chunky Monkey
猴子吃香蕉可是掰成好几段来吃哦!
把一个数组arr按照指定的数组大小size分割成若干个数组块。
例如:chunk([1,2,3,4],2)=[[1,2],[3,4]];
chunk([1,2,3,4,5],2)=[[1,2],[3,4],[5]];
function chunk(arr, size) {
// Break it up.
var arr1 = [];
for (var i = 0; i < arr.length; i = i + size) {
var arr2 = arr;
arr1.push(arr2.slice(i, i + size));
}
return arr1;
}
chunk(["a", "b", "c", "d"], 2);
11.Slasher Flick
截断数组
返回一个数组被截断n个元素后还剩余的元素,截断从索引0开始。
function slasher(arr, howMany) {
// 请把你的代码写在这里
var newArr = arr.splice(0, howMany);
return arr;
}
slasher([1, 2, 3], 2);
12.Mutations
比较字符串(蛤蟆可以吃队友,也可以吃对手)
如果数组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true。
举例,["hello", "Hello"]应该返回true,因为在忽略大小写的情况下,第二个字符串的所有字符都可以在第一个字符串找到。
["hello", "hey"]应该返回false,因为字符串"hello"并不包含字符"y"。
["Alien", "line"]应该返回true,因为"line"中所有字符都可以在"Alien"找到。
function mutation(arr) {
// 请把你的代码写在这里
var str1 = arr[0].toLowerCase();
var str2 = arr[1].toLowerCase();
var strArr = str2.split("");
for(var i = 0; i<strArr.length; i++){
var pos = str1.indexOf(strArr[i]);
if(pos === -1){
return false;
}
}
return true;
}
mutation(["hello", "hey"]);
13.Falsy Bouncer
真假美猴王!
删除数组中的所有假值。
在JavaScript中,假值有false、null、0、""、undefined 和NaN。
当你完成不了挑战的时候,记得开大招'Read-Search-Ask'。
这是一些对你有帮助的资源:
•Boolean Objects
•Array.filter()
例如:
bouncer([7, "ate", "", false, 9]) 应该返回 [7, "ate", 9].
bouncer(["a", "b", "c"])应该返回 ["a", "b", "c"].
bouncer([false, null, 0, NaN, undefined, ""]) 应该返回 [].
bouncer([1, null, NaN, 2, undefined]) 应该返回 [1, 2].
/*
这题注意是对filter的理解,这是我最开始的代码,写的不是很好,没多大参考价值
还要注意 NaN 比较。 自己不等于自己(NaN != NaN )
*/
function bouncer(arr) {
// Don't show a false ID to this bouncer.
var arr1 =[];
var j = 0;
arr.filter(function(val, index) {
if (val === false || val === null || val === 0 || val === "" || val === undefined || val !== val) {
arr1.push(index);
}
});
var len = arr1.length;
for(var i = 0; i < len ; i++){
arr.splice(arr1[i]-j,1);
j++;
}
return arr;
}
bouncer([7, "ate", "", false, 9]);
14.Seek and Destroy
金克斯的迫击炮!
实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值。
例如:
destroyer([1, 2, 3, 1, 2, 3], 2, 3) 应该返回 [1, 1].
destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3) 应该返回 [1, 5, 1].
destroyer([3, 5, 1, 2, 2], 2, 3, 5) 应该返回 [1].
destroyer([2, 3, 2, 3], 2, 3) 应该返回 [].
destroyer(["tree", "hamburger", 53], "tree", 53) 应该返回["hamburger"].
这是一些对你有帮助的资源:
•Arguments object
•Array.filter()
function destroyer(arr) {
// Remove all the values
var tempArguments = arguments;
return arr.filter(function(entry) {
for(var i = 1; i< tempArguments.length; i++) {
if (entry == tempArguments[i]) {
return false;
}
}
return true;
});
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
15.Where do I belong
我身在何处?
先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。
举例: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。
这是一些对你有帮助的资源:
•Array.sort()
function where(arr, num) {
// Find my place in this sorted array.
//注意sort() 排序规则
arr.sort(function(a,b){
return a- b;
});
for(var i =0;i<arr.length;i++){
if(arr[i]>num | arr[i] == num){
return i;
}
}
return arr.length;
}
where([5, 3, 20, 3], 5);
16.Caesars Cipher
凯撒密码 (让上帝的归上帝,凯撒的归凯撒。)
下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密码。
移位密码也就是密码中的字母会按照指定的数量来做移位。
一个常见的案例就是ROT13密码,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔ 'O',以此类推。
写一个ROT13函数,实现输入加密字符串,输出解密字符串。
所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,跳过它们。
例如:
rot13("SERR PBQR PNZC") 应该解码为 "FREE CODE CAMP"
rot13("SERR CVMMN!") 应该解码为 "FREE PIZZA!"
rot13("SERR YBIR?") 应该解码为 "FREE LOVE?"
rot13("GUR DHVPX OEBJA QBT WHZCRQ BIRE GUR YNML SBK.") 应该解码为 "THE QUICK BROWN DOG JUMPED OVER THE LAZY FOX."
这是一些对你有帮助的资源:
•String.charCodeAt()
•String.fromCharCode()
function rot13(str) { // LBH QVQ VG!
// 请把你的代码写在这里
var arr = str.toUpperCase().split(" ");
var str1 = [];
for (var i = 0; i < arr.length; i++) {
var arr1 = arr[i].split("");
for (var j = 0; j < arr1.length; j++) {
var num = arr1[j].charCodeAt();
if (num >= 65 && num <= 90) {
arr1[j] = num + 13 > 90 ? String.fromCharCode(64 + (num + 13 - 90)):String.fromCharCode(num + 13); //64 + (num + 13 - 90) 要明白为什么是64 ,
}
}
str1.push(arr1.join(""));
}
return str1.join(" ");
}
rot13("SERR PBQR PNZC"); // 你可以修改这一行来测试你的代码
我是楚简约,感谢您的阅读,
喜欢就点个赞呗,“❤喜欢”,
鼓励一下,你在看,我就继续写~
非简书用户,可以点右上角的三个“...”,然后"在Safari中打开”,就可以点赞咯~