FreeCodeCamp中文社群刷題答案及筆記
-
-
- 一、Reverse a String
- 二、Check for Palindromes(檢查是否為回文)
- 三、Find the Longest Word in a String(找出句子中長度最大的單詞)
- 四、Title Case a Sentence(把句子每個單詞首字母大寫)
- 五、Return Largest Numbers in Arrays(找出二維數組包含的每個子數組的最大數并重組為一個新數組)
- 六、Confirm the Ending(檢查字元串是否以某個指定的字元串結尾)
- 七、Repeat a string repeat a string(重複輸出字元串)
-
一、Reverse a String
翻轉字元串
先把字元串轉化成數組,再借助數組的reverse方法翻轉數組順序,最後把數組轉化成字元串。
你的結果必須得是一個字元串
當你完成不了挑戰的時候,記得開大招’Read-Search-Ask’。
這是一些對你有幫助的資源:
Global String Object
String.split
Array.reverse
Array.join
function reverseString(str) {
// 請把你的代碼寫在這裡
var strToArray = str.split('');
//return strToArray; //["h", "e", "l", "l", "o"]
//var strToArray = str.split(' '); //["hello"],一個個單詞
var reverseArray = strToArray.reverse();
//return reverseArray; //["o", "l", "l", "e", "h"]
var arrayToStr = reverseArray.join('');
return arrayToStr;
}
// reverseString("hello"); //[olleh]
reverseString("Hello, how are you?");
//若是使用split(' ')和join(' '),則傳回結果為"you? are how Hello,"
二、Check for Palindromes(檢查是否為回文)
檢查回文字元串
如果給定的字元串是回文,傳回true,反之,傳回false。
如果一個字元串忽略标點符号、大小寫和空格,正着讀和反着讀一模一樣,那麼這個字元串就是palindrome(回文)。
注意你需要去掉字元串多餘的标點符号和空格,然後把字元串轉化成小寫來驗證此字元串是否為回文。
函數參數的值可以為”racecar”,”RaceCar”和”race CAR”。
當你完成不了挑戰的時候,記得開大招’Read-Search-Ask’。
function palindrome(str) {
// 請把你的代碼寫在這裡
var strToLowerCase = str.toLowerCase(); //把字元串轉換為小寫
//return newStr;
var strToArray = strToLowerCase.split(''); //把字元串轉換為數組
//return strToArray;
//過濾字元串中的标點符号和空格
var newArray = strToArray.filter(function(val) {
return (val !== " " && val !== "," && val !== "." && val !== "?" && val !== ":" && val !== ";" && val !== "`" && val !== "'" && val !== "_" && val !== "/" && val !== "-" && val !== "\\" && val !== "" && val !== "\(" && val !== "\)" && val !== "!");
});
//return newArray;
//把過濾後的數組轉換回字元串
var toString = newArray.join('');
//return toString;
//判斷是否為回文
for(var i=, j=toString.length-; i<j; i++, j--) {
if(toString[i] !== toString[j]) {
return false;
}
}
return true;
}
palindrome("eyerar"); //false
三、Find the Longest Word in a String(找出句子中長度最大的單詞)
找出最長單詞
在句子中找出最長的單詞,并傳回它的長度。
函數的傳回值應該是一個數字。
當你完成不了挑戰的時候,記得開大招’Read-Search-Ask’。
//找出一個句子中最長的單詞,并傳回其長度
function findLongestWord(str) {
//把句子分割為單詞數組
var strToArray = str.split(' ');
//return strToArray;
//找出數組中長度最大的單詞
var everyLength = [];
for(var i = ; i < strToArray.length; i++) {
everyLength.push(strToArray[i].length);
}
//return everyLength; //[3, 5, 5, 3, 6, 4, 3, 4, 3]
//把數組中元素排序
var sortEveryLength = everyLength.sort(function(a, b) {
return a - b;
});
//return sortEveryLength; //[3, 3, 3, 3, 4, 4, 5, 5, 6]
//傳回排序後的數組的最後一項(即長度最大項)
return sortEveryLength[sortEveryLength.length-]; //6
}
findLongestWord("The quick brown fox jumped over the lazy dog");
四、Title Case a Sentence(把句子每個單詞首字母大寫)
要點:slice()方法
slice()方法介紹
slice() 方法可從已有的數組中傳回標明的元素。
參數 | 說明 |
---|---|
start | 可選。規定從何處開始選取。如果是負數,那麼它規定從數組尾部開始算起的位置。也就是說,-1 指最後一個元素,-2 指倒數第二個元素,以此類推。 |
end | 可選。規定從何處結束選取。該參數是數組片斷結束處的數組下标。如果沒有指定該參數,那麼切分的數組包含從 start 到數組結束的所有元素。如果這個參數是負數,那麼它規定的是從數組尾部開始算起的元素。 |
slice()方法傳回一個新的數組,包含從start到end (不包括該元素)的 元素。
String.slice(start,end)
var s = "abcdefg";
s.slice(,) // Returns "abcd"
s.slice(,) // Returns "cd"
s.slice() // Returns "efg"
s.slice(,-) // Returns "def"
s.slice(,-) // Returns "de"
s.slice(-,-) // Should return "ef"
Array.slice(start,end)
傳回從start開始到end的子數組,如果end這個參數沒有被設定,則傳回從start開始到最後的數組元素。
var a = [,,,,];
a.slice(,); // Returns [1,2,3]
a.slice(); // Returns [4,5]
a.slice(,-); // Returns [2,3,4]
a.slice(-,-); // Returns [3]
回歸本題題目
句中單詞首字母大寫
確定字元串的每個單詞首字母都大寫,其餘部分小寫。
像’the’和’of’這樣的連接配接符同理。
當你完成不了挑戰的時候,記得開大招’Read-Search-Ask’。
//把句子的每個單詞首字元大寫
function titleCase(str) {
//把句子分割為單詞數組
var toWordArray = str.split(' ');
//return toWordArray;
//周遊數組,把每個單詞首字母變為大寫
var newArray = [];
for(var i=; i<toWordArray.length; i++) {
newArray[i] = toWordArray[i].slice(,).toUpperCase() + toWordArray[i].slice().toLowerCase();
}
//return newArray; //["T'm", "A", "Little", "Tea", "Pot"]
//把新數組轉換為字元串
var newString = newArray.join(' ');
return newString;
}
titleCase("I'm a little tea pot");
/*titleCase("sHoRt AnD sToUt"); //Short And Stout */
五、Return Largest Numbers in Arrays(找出二維數組包含的每個子數組的最大數并重組為一個新數組)
找出多個數組中的最大數
右邊大數組中包含了4個小數組,分别找到每個小數組中的最大值,然後把它們串聯起來,形成一個新數組。
提示:你可以用for循環來疊代數組,并通過arr[i]的方式來通路數組的每個元素。
當你完成不了挑戰的時候,記得開大招’Read-Search-Ask’。
//找出每個小數組中的最大數并重組成一個新數組
function largestOfFour(arr) {
var maxArr = []; //接收找出的每個數組的最大數
for(var i=; i<arr.length; i++) {
var max = arr[i][];
for(var j = ; j < arr[i].length; j++) {
if(max < arr[i][j]) {
max = arr[i][j];
}
}
maxArr[i] = max;
}
return maxArr;
}
largestOfFour([[, , , ], [, , , ], [, , , ], [, , , ]]); //[5, 27, 39, 1001]
注:此外的傳回數組中的最大最小值的方法還有(使用apply将數組傳入max方法中直接傳回)
var a = [, , , , , ];
var max = Math.max.apply(null, a); //6
var min = Math.min.apply(null, a); //1
是以,本題的解答還可以如下:
//找出每個小數組中的最大數并重組成一個新數組
function largestOfFour(arr) {
var maxArr = []; //接收找出的每個數組的最大數
for(var i=; i<arr.length; i++) {
maxArr[i] = Math.max.apply(null, arr[i]);
}
return maxArr;
}
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’。
這是一些對你有幫助的資源:
substr()方法介紹
substr() 方法傳回一個字元串中從指定位置開始到指定字元數的字元。
文法:
str.substr(start, length)
參數 | 說明 |
---|---|
start | 開始提取字元的位置。如果為負值,則被看作 strLength + start,其中 strLength 為字元串的長度(例如,如果 start 為 -3,則被看作 strLength + (-3))。 |
length | 可選。提取的字元數(字元串長度)。如果忽略 length,則 substr 提取字元,直到字元串末尾。 |
start
是一個字元的索引。首字元的索引為 0,最後一個字元的索引為 字元串的長度減去1。
substr
從start 位置開始提取字元,提取
length
個字元(或直到字元串的末尾)。
如果
start
為正值,且大于或等于字元串的長度,則
substr
傳回一個空字元串。
如果
start
為負值,則
substr
把它作為從字元串末尾開始的一個字元索引。如果
start
為負值且
abs(start)
大于字元串的長度,則 substr 使用 0 作為開始提取的索引。注意負的 start 參數不被 Microsoft JScript 所支援。
如果
length
為 0 或負值,則
substr
傳回一個空字元串。如果忽略
length
,則
substr
提取字元,直到字元串末尾。
示例
var str = "abcdefghij";
console.log("(1,2): " + str.substr(,)); // (1,2): bc
console.log("(-3,2): " + str.substr(-,)); // (-3,2): hi
console.log("(-3): " + str.substr(-)); // (-3): hij
console.log("(1): " + str.substr()); // (1): bcdefghij
console.log("(-20, 2): " + str.substr(-,)); // (-20, 2): ab
console.log("(20, 2): " + str.substr(,)); // (20, 2):
好了,知識準備好了,可以開始做題羅!
//判斷一個字元串(str)是否以指定的字元串結尾
/*
本人思路為:計算出函數中的指定字元串target的長度length,
然後在字元串str中從字元串結尾處開始查找長度為length的字元串,
比較該字元串是否與target相等,相等傳回TRUE,否則傳回FALSE
*/
function confirmEnding(str, target) {
var targetLength = target.length; //計算target字元串的長度
//return targetLength; //3
var findSubstr = str.substr(str.length-targetLength, targetLength);
//return findSubstr; //ian
//比較查找出的字元串是否等于給定的字元串target
for(var i=; i<targetLength; i++) {
if(target[i] !== findSubstr[i]) {
return false;
}
}
return true;
}
confirmEnding("Bastian", "ian");
七、Repeat a string repeat a string(重複輸出字元串)
重複輸出字元串
(重要的事情說3遍)
重複一個指定的字元串 num次,如果num是一個負數則傳回一個空字元串。
當你完成不了挑戰的時候,記得開大招’Read-Search-Ask’。
//重複一個指定的字元串 num次,如果num是一個負數則傳回一個空字元串。
function repeat(str, num) {
if(num < ) {
return "";
}
var newString = "";
for(var i=; i<num; i++) {
newString = newString.concat(str);
}
return newString;
}
repeat("abc", ); //abcabcabc