FreeCodeCamp中文社区刷题答案及笔记(之篇三回文、数组、字符串的有关计算)

FreeCodeCamp中文社区刷题答案及笔记

一、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=0, j=toString.length-1; 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 = 0; 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-1];  //6
}

findLongestWord("The quick brown fox jumped over the lazy dog");

四、Title Case a Sentence(把句子每个单词首字母大写)

要点:slice()方法
slice()方法介绍
slice() 方法可从已有的数组中返回选定的元素。

array.slice(start, end);
参数 说明
start 可选。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。

slice()方法返回一个新的数组,包含从start到end (不包括该元素)的 元素。

String.slice(start,end)

var s = "abcdefg";
s.slice(0,4)    // Returns "abcd"
s.slice(2,4)    // Returns "cd"
s.slice(4)      // Returns "efg"
s.slice(3,-1)   // Returns "def"
s.slice(3,-2)   // Returns "de"
s.slice(-3,-1)  // Should return "ef"

Array.slice(start,end)
返回从start开始到end的子数组,如果end这个参数没有被设置,则返回从start开始到最后的数组元素。

var a = [1,2,3,4,5];
a.slice(0,3);    // Returns [1,2,3]
a.slice(3);      // Returns [4,5]
a.slice(1,-1);   // Returns [2,3,4]
a.slice(-3,-2);  // Returns [3]

回归本题题目
句中单词首字母大写

确保字符串的每个单词首字母都大写,其余部分小写。

像’the’和’of’这样的连接符同理。

当你完成不了挑战的时候,记得开大招’Read-Search-Ask’。

//把句子的每个单词首字符大写
function titleCase(str) {
  //把句子分割为单词数组
  var toWordArray = str.split(' ');
  //return toWordArray;

  //遍历数组,把每个单词首字母变为大写
  var newArray = [];
  for(var i=0; i<toWordArray.length; i++) {
     newArray[i] = toWordArray[i].slice(0,1).toUpperCase() + toWordArray[i].slice(1).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=0; i<arr.length; i++) {
    var max = arr[i][0];
    for(var j = 1; j < arr[i].length; j++) {

      if(max < arr[i][j]) {
        max = arr[i][j];
      }
    }
    maxArr[i] = max;
    }
    return maxArr;
  }

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]); //[5, 27, 39, 1001]

注:此外的返回数组中的最大最小值的方法还有(使用apply将数组传入max方法中直接返回)

var a = [1, 2, 3, 4, 5, 6];
var max = Math.max.apply(null, a);  //6
var min = Math.min.apply(null, a);  //1

所以,本题的解答还可以如下:

//找出每个小数组中的最大数并重组成一个新数组

function largestOfFour(arr) {
  var maxArr = [];         //接收找出的每个数组的最大数
  for(var i=0; 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));   // (1,2): bc
console.log("(-3,2): "   + str.substr(-3,2));  // (-3,2): hi
console.log("(-3): "     + str.substr(-3));    // (-3): hij
console.log("(1): "      + str.substr(1));     // (1): bcdefghij
console.log("(-20, 2): " + str.substr(-20,2)); // (-20, 2): ab
console.log("(20, 2): "  + str.substr(20,2));  // (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=0; 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 < 0) {
    return "";
  }
  var newString = "";
  for(var i=0; i<num; i++) {
    newString = newString.concat(str);
  }
  return newString;
}

repeat("abc", 3); //abcabcabc

猜你喜欢

转载自blog.csdn.net/qq_36595013/article/details/80710541