FCC学习记录——算法基础

算法基础:单词的首字母大写
将给出的字符串中所有单词的第一个字母变成大写,并返回得到的字符串。请确保其余的字母是小写的。出于练习的目的,“ the ”“ of ”等虚词的首字母也要大写。

function titleCase(str) { 
let arr = str.split(' '); 
for(let i = 0; i < arr.length; i++){   
arr[i] = arr[i][0].toUpperCase()+arr[i].slice(1).toLowerCase(); 
}  
return arr.join(' ');}
titleCase("I'm a little tea pot");

发现者与看护者
请写一个函数来检查一个数组(第一个参数)中的元素,并返回数组中第一个通过校验测试(第二个参数,一个接受一个参数并返回一个布尔值的函数)的元素。如果没有元素通过测试,则返回 undefined。如果你有任何疑问,可以访问 Read-Search-Ask 。你可以与他人结对编程。请你独立解决挑战中的问题。

function findElement(arr, func) {
if(arr.filter(func)===0) return "undefined";else
  return arr.filter(func)[0];}
findElement([1, 2, 3, 4], num => num % 2 === 0);

算法基础:截断字符串
如果一个字符串(第一个参数)的长度大于给出的值(第二个参数),则截断它并在其后加上 …。返回被截断的字符串。

function truncateString(str, num) {  
// Clear out that junk in your trunkif 
(str.length > num ) {    
return str.slice(0, num) + '...';  
} else {   
 return str;  }}
truncateString("A-tisket a-tasket A green and yellow basket", 8);

算法基础:重复字符串
将一个给定的字符串(第一个参数, str)重复 num(第二个参数)次。如果 num不是一个正数,返回一个空字符串。

function repeatStringNumTimes(str, num) {  
// repeat after me  
let str1 = '';  
for(let i = 0; i < num; i++){    
str1 = str1.concat(str);  
}  
return str1;}
repeatStringNumTimes("abc", 3);

算法基础:检查字符串的结尾
检查一个字符串(第一个参数, str)是否以给定的字符串(第二个参数 target)结束。本题目可以用 ES2015 引入的 .endsWith()方法来解决。但本挑战的目的是让你使用 JavaScript 的一个 substring 方法。

function confirmEnding(str, target) {
   return target === str.substring(str.length-target.length);}
confirmEnding("Bastian", "n");

算法基础:返回数组中最大的数字
返回一个数组,它要由给出的所有子数组中的最大值组成。简单起见,给出的数组总会包含4个子数组。记得你可以在一个简单的 for 循环中遍历一个数组,并用 arr[i]这样的语法来访问数组中的元素。

function largestOfFour(arr) {  
let maxarr = [];    
for(let i = 0; i < arr.length; i++){    
let max = arr[i][0];    
for(let j = 0; j < arr[i].length; j++){     
if(arr[i][j] > max)        
max = arr[i][j];  
}  
maxarr.push(max);  
}    
return maxarr;}
console.log(largestOfFour([[17, 23, 25, 12], [25, 7, 34, 48], [4, -10, 18, 21], [-72, -3, -17, -10]]));

算法基础:翻转字符串
反转给出的字符串。你在反转字符串前可能需要将其切分成字符的数组。你的结果必须是一个字符串。

function reverseString(str) {  
return str.split("").reverse().join("");}
reverseString("hello");

算法基础:slice 和 splice本挑战的输入参数为:两个数组和一个索引值。请利用数组的 slice和 splice方法,将第一个数组中的所有元素依次复制到第二个数组中。请从第二个数组中索引值为 n的地方开始插入。返回插入元素后的数组。输入的两个数组在函数执行前后要保持不变。

javascript
function frankenSplice(arr1, arr2, n) {  
let arr = arr2.slice();
for(let i = 0; i < arr1.length; i++){  
arr.splice(n, 0, arr1[i]);  n++;  
}    
return arr;
}
frankenSplice([1, 2, 3], [4, 5, 6], 1);```

去除数组中的假值
从一个数组中移除所有假值(falsy values)。JavaScript 中的假值有 false、null、0、""、undefined和 NaN。提示:请尝试将每一个值转换为一个布尔值(boolean)。

function bouncer(arr) {
  return arr.filter(Boolean);
}
bouncer([7, "ate", "", false, 9]);

算法基础:我身在何处
返回数组(第一个参数)被排序后,将一个值(第二个参数)插入到该数组中而使数组保持有序的最小的索引。返回的值应该是一个数字。

例如,getIndexToIns([1,2,3,4], 1.5)应该返回 1因为 1.5 大于 1(索引为 0),但小于 2(索引为 1)。

同样地,getIndexToIns([20,3,5], 19)应该返回 2因为数组被排序后会变成 [3,5,20],而 19小于 20(索引为 2)且大于 5(索引为 1)。

function getIndexToIns(arr, num) {
  // Find my place in this sorted array.
arr.sort(function(a, b){return a-b});
if(arr.length == 0)
return 0;
else if(num > arr[arr.length-1])
return arr.length;
else 
 for(let i = 0;i < arr.length; i++){
   if(arr[i] >= num) {
   return i;
   }
 }

}

getIndexToIns([5, 3, 20, 3], 5);

集合之间的关系
输入参数是一个有两个字符串元素的数组。如果第一个字符串中包含了第二个字符串中的所有字母,则返回 true。

例如,[“hello”, “Hello”]应该返回 true 因为第一个字符串中包含了第二个字符串中出现的所有字母(忽略大小写)。

而 [“hello”, “hey”]应该返回 false 因为第一个字符串 “hello” 没有包含字母 “y”。

最后,[“Alien”, “line”], 应该返回 true,因为 “line” 中的所有字母都被包含在 “Alien” 中。

function mutation(arr) {
  let a0 = arr[0].toLowerCase();
  let a1 = arr[1].toLowerCase();
  for(let i = 0; i < a1.length; i++){
    if(a0.indexOf(a1[i]) < 0)
    return false;
  }
  return true;
}

mutation(["hello", "hey"]);

猴子吃香蕉
请写一个函数,将一个数组(第一个参数)分割成一组长度为 size(第二个参数)的数组,然后在一个二维数组中返回这些结果。
我的方法

function chunkArrayInGroups(arr, size) {
  // Break it up.
  let arr1 = [];
let count = 0;
  for(let i = 0; i <Math.ceil(arr.length/size);i++){
arr1.push([]);

  for(let j = 0; j < size && count < arr.length; j++){
    arr1[i].push(arr[i*size+j]);  
    count++;
  }
  }
  return arr1;
}

chunkArrayInGroups(["a", "b", "c", "d"], 2);

另一种好的解决方法

function chunkArrayInGroups(arr, size) {
      // Break it up.
      var arr2 = [];
      for (var i = 0; i < arr.length; i+=size) {
    	arr2.push(arr.slice(i , i+size));
      }
      return arr2;
    }

你可能感兴趣的:(FCC学习记录——算法基础)