Reverse a String 翻轉字元串 先把字元串轉化成數組,再藉助數組的reverse方法翻轉數組順序,最後把數組轉化成字元串。 你的結果必須得是一個字元串 當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。 這是一些對你有幫助的資源: Global String Obj ...
Reverse a String
翻轉字元串
先把字元串轉化成數組,再藉助數組的reverse方法翻轉數組順序,最後把數組轉化成字元串。
你的結果必須得是一個字元串
當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。
這是一些對你有幫助的資源:
1 function reverseString(str) { 2 // 請把你的代碼寫在這裡 3 var val=[]; 4 val=str.split(''); 5 str=(val.reverse()).join(''); 6 return str; 7 } 8 9 10 reverseString("hello");
Factorialize a Number
計算一個整數的階乘
如果用字母n來代表一個整數,階乘代表著所有小於或等於n的整數的乘積。
階乘通常簡寫成 n!
例如: 5! = 1 * 2 * 3 * 4 * 5 = 120
當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。
這是一些對你有幫助的資源:
1 function factorialize(num) { 2 // 請把你的代碼寫在這裡 3 if(num === 0) 4 return 1; 5 else if (num == 1) 6 return num; 7 else 8 return num*factorialize(num-1); //這裡採用了遞歸的方法 9 } 10 11 12 factorialize(0);
Check for Palindromes
檢查迴文字元串
如果給定的字元串是迴文,返回true,反之,返回false。
如果一個字元串忽略標點符號、大小寫和空格,正著讀和反著讀一模一樣,那麼這個字元串就是palindrome(迴文)。
註意你需要去掉字元串多餘的標點符號和空格,然後把字元串轉化成小寫來驗證此字元串是否為迴文。
函數參數的值可以為"racecar","RaceCar"和"race CAR"。
當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。
這是一些對你有幫助的資源:
1 function palindrome(str) { 2 // 請把你的代碼寫在這裡 3 var val=[]; 4 var str1,str2; 5 val=str.replace(/[^a-zA-Z0-9]/g,'').toLowerCase().split(''); 6 str1=val.join(""); 7 str2=val.reverse.join(''); 8 if (str1===str2) 9 return true; 10 else 11 return false; 12 } 13 14 15 palindrome("eye");
Find the Longest Word in a String
找出最長單詞
在句子中找出最長的單詞,並返回它的長度。
函數的返回值應該是一個數字。
當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。
這是一些對你有幫助的資源:
1 function findLongestWord(str) { 2 // 請把你的代碼寫在這裡 3 var val=str.split(' '); 4 var j=0; 5 for(var i=1;i<val.length;i++){ 6 if(val[j].length<val[i].length) 7 j=i; 8 } 9 10 return val[j].length; 11 } 12 13 14 findLongestWord("The quick brown fox jumped over the lazy dog");
Title Case a Sentence
句中單詞首字母大寫
確保字元串的每個單詞首字母都大寫,其餘部分小寫。
像'the'和'of'這樣的連接符同理。
當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。
這是一些對你有幫助的資源:
1 function titleCase(str) { 2 // 請把你的代碼寫在這裡 3 var val=str.toLowerCase().split(' '); 4 for(var i=0;i<val.length;i++){ 5 var val2=val[i].split(''); //不要把分開裡面也當成數組,那是字元串 6 val2[0]=val2[0].toUpperCase(); 7 val[i]=val2.join(""); 8 } 9 10 str=val.join(' '); 11 return str; 12 } 13 14 15 /* 高人寫法! 16 function titleCase(str) { 17 18 19 var newstr=str.toLowerCase().split(" ").map(function(item){ 20 //一、toLowerCase()全部轉化為小寫; 21 //二、split()拆分字元串為數組; 22 //三、map()方法返回一個新數組; 23 return item[0].toString().toUpperCase()+item.slice(1); 24 //獲取數組的第一個字母,轉化為大寫 25 //然後加上後面的小寫內容(slice()方法獲取範圍內容,1表示從第二個字母開始) 26 }).join(" "); 27 //join()方法組合成字元串 28 return newstr; 29 } 30 */ 31 32 33 titleCase("I'm a little tea pot")
Return Largest Numbers in Arrays
找出多個數組中的最大數
右邊大數組中包含了4個小數組,分別找到每個小數組中的最大值,然後把它們串聯起來,形成一個新數組。
提示:你可以用for迴圈來迭代數組,並通過arr[i]的方式來訪問數組的每個元素。
當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。
這是一些對你有幫助的資源:
1 function largestOfFour(arr) { 2 // 請把你的代碼寫在這裡 3 var temp=[]; 4 for(var i=0;i<arr.length;i++){ 5 var val=arr[i][0]; 6 for(var j=1;j<arr[i].length;j++){ 7 if(val<arr[i][j]) val=arr[i][j] 8 } 9 temp.push(val) 10 } 11 return temp; 12 } 13 14 15 largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
Confirm the Ending
檢查字元串結尾
判斷一個字元串(str)是否以指定的字元串(target)結尾。
如果是,返回true;如果不是,返回false。
當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。
這是一些對你有幫助的資源:
1 function confirmEnding(str, target) { 2 // 請把你的代碼寫在這裡 3 str=str.split(' ').join('').substr(-target.length); 4 if(str==target) 5 return true; 6 else 7 return false; 8 } 9 10 11 confirmEnding("Bastian", "n");
str.substr(start[, length])
參數:
start
開始提取字元的位置,如果為負值,則從字元串的尾部開始算起的位置。
length
可選,提取的字元數,如果省略了該參數,那麼返回從開始位置到結尾的字元串。
Repeat a string repeat a string
重覆輸出字元串
(重要的事情說3遍)
重覆一個指定的字元串 num次,如果num是一個負數則返回一個空字元串。
當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。
這是一些對你有幫助的資源:
1 function repeat(str, num) { 2 // 請把你的代碼寫在這裡 3 var k=''; 4 if(num<0) return ""; 5 else{ 6 for(var i=0;i<num;i++) 7 k+=str; 8 return k;} 9 } 10 11 12 repeat("abc", 3);
Truncate a string
截斷字元串
(用瑞茲來截斷對面的退路)
如果字元串的長度比指定的參數num長,則把多餘的部分用...來表示。
切記,插入到字元串尾部的三個點號也會計入字元串的長度。
但是,如果指定的參數num小於或等於3,則添加的三個點號不會計入字元串的長度。
當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。
這是一些對你有幫助的資源:
1 function truncate(str, num) { 2 // 請把你的代碼寫在這裡 3 var str1=""; 4 if(num<=3) 5 str1=str.slice(0,num)+"..."; 6 else if(num>=str.length){ 7 str1=str; 8 }else{ 9 str1=str.slice(0,num-3)+"..."; 10 } 11 return str1; 12 } 13 14 15 truncate("A-tisket a-tasket A green and yellow basket", 11);
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]];
當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。
這是一些對你有幫助的資源:
1 function chunk(arr, size) { 2 // 請把你的代碼寫在這裡 3 var arr1=[]; 4 var start=0,end=size; 5 for(var i=0;i<size+1;i++){ //多一次迴圈,處理分割兩次得3塊的情況 6 if(start>=arr.length) 7 break; //已經分配結束 8 else if(end>=arr.length) 9 arr1.push(arr.slice(start)); //最後一次不夠數或剛好夠數 10 else {arr1.push(arr.slice(start,end));} 11 start+=size; 12 end+=size; 13 } 14 return arr1; 15 } 16 17 18 chunk([0, 1, 2, 3, 4, 5], 2);
Slasher Flick
截斷數組
返回一個數組被截斷n個元素後還剩餘的元素,截斷從索引0開始。
當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。
這是一些對你有幫助的資源:
1 function slasher(arr, howMany) { 2 // 請把你的代碼寫在這裡 3 var val=[]; 4 if(howMany>=arr.length) 5 return val; 6 else 7 //return arr.slice(howMany); //解法一 8 return arr.splice(howMany); //解法二 9 10 } 11 12 13 slasher([1, 2, 3], 2);
解法一:
思路:首先準確理解slice()的用法,slice不會改變原數組,會生成一個新數組,slice(begin,end),這裡howMany是begin,end被省略,則會一直提取到原數組末尾。
解法二:
思路:詳細理解splice()的用法,splice會直接對數組進行修改,返回的是由被刪除元素組成的一個數組,則原數組中就沒有了被刪除的元素。
Mutations
比較字元串
(蛤蟆可以吃隊友,也可以吃對手)
如果數組第一個字元串元素包含了第二個字元串元素的所有字元,函數返回true。
舉例,["hello", "Hello"]應該返回true,因為在忽略大小寫的情況下,第二個字元串的所有字元都可以在第一個字元串找到。
["hello", "hey"]應該返回false,因為字元串"hello"並不包含字元"y"。
["Alien", "line"]應該返回true,因為"line"中所有字元都可以在"Alien"找到。
當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。
這是一些對你有幫助的資源:
1 function mutation(arr) { 2 // 請把你的代碼寫在這裡 3 arr[0]=arr[0].toLowerCase(); //將所有字元串轉換為小寫 4 arr[1]=arr[1].toLowerCase(); 5 for(var i=0; i<arr[1].length; i++) //對要查的子鏈進行遍歷 6 //檢測第二個字元串中的字元在第一個數組中是否存在 7 if(arr[0].indexOf(arr[1][i])==-1){ 8 return false; 9 } 10 return true; //迴圈未輸出false即輸出true 11 } 12 mutation(["hello", "hey"]);
Falsy Bouncer
過濾數組假值
(真假美猴王)
刪除數組中的所有假值。
在JavaScript中,假值有false、null、0、""、undefined 和 NaN。
當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。
這是一些對你有幫助的資源:
1 function bouncer(arr) { 2 // 請把你的代碼寫在這裡 3 return arr.filter(function(s){ 4 return Boolean(s); 5 }); 6 //解法二: return arr.filter(Boolean); 7 } 8 9 10 bouncer([7, "ate", "", false, 9]);
思路:用 Boolean() 函數進行類型轉換。如果它的參數是 0、-0、null、undefined、false、NaN、"",生成的Boolean對象的值會為false,也就是“假值”。
var new_array = arr.filter(callback(element[, index[, array]])[, thisArg])
filter 為數組中的每個元素調用一次 callback 函數,並利用所有使得 callback 返回 true 或 等價於 true 的值 的元素創建一個新數組。callback 只會在已經賦值的索引上被調用,對於那些已經被刪除或者從未被賦值的索引不會被調用。那些沒有通過 callback 測試的元素會被跳過,不會被包含在新數組中。
在 JavaScript中,Truthy(真值)指的是在)布爾值上下文中轉換後的值為真的值.所有值都是真值,除非它們被定義為falsy(即除了)false,0,"",null,undefined 和 NaN外)。
JavaScript在布爾值上下文中使用強制類型轉換(coercion)。
JavaScript中的真值示例如下(將被轉換為true,if後的代碼段將被執行):
if(true) if({}) if([]) if(42) if("foo") if(new Date())
if(-42) if(3.14) if(-3.14) if(Infinity) if(-Infinity)
Seek and Destroy
摧毀數組
金克斯的迫擊炮!
實現一個摧毀(destroyer)函數,第一個參數是待摧毀的數組,其餘的參數是待摧毀的值。
當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。
這是一些對你有幫助的資源:
1 function destroyer(arr) { 2 // 請把你的代碼寫在這裡 3 var argumentsArr = [];//創立摧毀值數組 4 for(var i=0;i<arguments.length-1;i++){ 5 argumentsArr.push(arguments[i+1]); 6 } 7 arr = arr.filter(function(element){ 8 //遍歷arr所有值,判斷是否在摧毀值數組中,無則返回-1,為true,返回通過的元素 9 return argumentsArr.indexOf(element) == -1; 10 }); 11 return arr; 12 destroyer([1, 2, 3, 1, 2, 3], 2, 3);
簡單總結filter方法:
1,遍曆數組中的元素
2,函數測試,檢查return是否等於true;
3,返回一個包含所有通過測試的元素的新數組。
arr.filter方法本身自帶迴圈,它自己會使用我們給定的函數來測試數組中的所有元素,並創建(即返回)一個包含所有通過測試的元素的新數組(註意它並沒有改變原數組)。不能嵌套入for迴圈中!
錯誤寫法:
1 for(i=0;i<argumentsArr.length;i++ ){ arr.filter(function(argumentsArr[i]){ 2 return arr.indexOf(argumentsArr[i]) == -1;}); 3 }
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。
當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。
這是一些對你有幫助的資源:
1 function where(arr, num) { 2 // 請把你的代碼寫在這裡 3 arr.push(num); 4 arr.sort(function(a,b){ 5 return a-b; 6 });//升序排列 7 return arr.indexOf(num); 8 } 9 10 11 where([40, 60], 50);
如果指明瞭 compareFunction ,那麼數組會按照調用該函數的返回值排序。即 a 和 b 是兩個將要被比較的元素:
1、如果 compareFunction(a, b) 小於 0 ,那麼 a 會被排列到 b 之前;
2、如果 compareFunction(a, b) 等於 0 , a 和 b 的相對位置不變。備註: ECMAScript 標準並不保證這一行為,而且也不是所有瀏覽器都會遵守(例如 Mozilla 在 2003 年之前的版本);
3、如果 compareFunction(a, b) 大於 0 , b 會被排列到 a 之前。
compareFunction(a, b) 必須總是對相同的輸入返回相同的比較結果,否則排序的結果將是不確定的。
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
簡化一下(剛好相反):
- a-b輸出從小到大排序
- b-a輸出從大到小排序
Caesars Cipher
凱撒密碼
(讓上帝的歸上帝,凱撒的歸凱撒)
下麵我們來介紹風靡全球的凱撒密碼Caesar cipher,又叫移位密碼。
移位密碼也就是密碼中的字母會按照指定的數量來做移位。
一個常見的案例就是ROT13密碼,字母會移位13個位置。由'A' ↔ 'N', 'B' ↔ 'O',以此類推。
寫一個ROT13函數,實現輸入加密字元串,輸出解密字元串。
所有的字母都是大寫,不要轉化任何非字母形式的字元(例如:空格,標點符號),遇到這些特殊字元,跳過它們。
當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。