freecodecamp 之基本算法脚本

一、找到数组的子数组中每个最大值

 1.使用简单的for循环,使用数组语法访问每个arr[i]

2.返回的数组由每个子数组的最大值组成

function largestOfFour(arr) {
  // You can do this
  let newArr=[];
  for(var i=0;i<arr.length;i++){
  newArr[i]= Math.max.apply(null,arr[i]); 
}
return newArr;
}
  
largestOfFour([[17, 23, 25, 12], [25, 7, 34, 48], [4, -10, 18, 21], [-72, -3, -17, -10]]);

Math.max参数不支持数组,返回n多数值参数中的最大值

apply语法:apply(this,arguments)


二、找到字符串的最长子字符串

用split 将字符串以空格为分隔符分割并且存为字符串数组

初始化长度len

function findLongestWordLength(str) {
  let arr1=str.split(" ");
let len=0; //初始化长度
}
findLongestWordLength("The quick brown fox jumped over the lazy dog");

 通过for循环遍历arr1数组中的每一个字符串

如果其长度大于len ,将其长度赋给len


for(let i=0;i<arr1.length;i++){
if(arr1[i].length>len){
  len=arr1[i].length;
}
}
return  len;
}

三、匹配字符串尾部

1. str.endsWith(target)

function confirmEnding(str, target) {
  return  str.endsWith(target);
}

confirmEnding("Bastian", "n");

2. str.substring 提取字符串介于两个下标间的字符,一个值表示从伊至终

//substring一个参数表示从此处开始到结尾,(字符串长度-尾匹配项长度)
return str.substring(str.length-target.length)===target;

四、缩短字符串

定义一个空数组用来存最终会返回的字符串,一个变量存字符串的长度

function truncateString(str, num) {
  // Clear out that junk in your trunk
  let leng=str.length;
  let char1=[];
}

truncateString("A-tisket a-tasket A green and yellow basket", "A-tisket a-tasket A green and yellow basket".length + 2)

题目要求“truncateString("A-tisket a-tasket A green and yellow basket", "A-tisket a-tasket A green and yellow basket".length + 2)     should return "A-tisket a-tasket A green and yellow basket".”

判断参数num是否超出str的长度


  if(num<leng){
      for(let i=0;i<num;i++){
    char1.push(str[i]);
  }  
   return char1.join("")+"...";
  }else{
      char1.push(str);
      return char1.join("");
    }

}


五、Finders Keepers

function findElement(arr, func) {
  let num = 0;
  for(let i=0;i<arr.length;i++){
      num=arr[i];
      if((num%2===0)&&func){
        return num;
      }else{
      num=undefined;
      }  
  }
  return num;
}

findElement([1, 2, 3, 4], num => num % 2 === 0);

然鹅  看到论坛别人一句  return arr.find(func);  足矣

菜鸡能写出来不错了hhhhh~~~


六、大写一组字符串的首字母

先将字符串通过 split  以空格分割并且储存为数组

function titleCase(str) {
  let newStr=str.split(" ");
}
titleCase("I'm a little tea pot");

 for 循环遍历数组中的子字符串,让其小写,将每个子字符串再次分割,

 for(let i=0;i<newStr.length;i++){
   newStr[i]=newStr[i].toLowerCase().split("");
  }

割成这个样子 

再将其上数组第一项  newStr  [i] [0] 大写 

 newStr[i][0]=newStr[i][0].toUpperCase();
   newStr[i]= newStr[i].join("");

将首字母大写的每一项子字符串(数组形式)以 join方法 存为字符串形式 

跳出for循环后,

return newStr.join(" ");

有种叫做别人的代码

function titleCase(str) {
  return str.toLowerCase().replace(/(?:^|\s)\S/g, 
    function(a) { 
    return a.toUpperCase(); 
  });
}
titleCase("I'm a little tea pot");

//
function titleCase(str) {
  return str.toLowerCase().replace(/(^|\s)\S/g, (L) => L.toUpperCase());
}

七、splice 和 slice

题目要求:用到splice和slice,arr1和arr2不变,

frankenSplice([1, 2, 3], [4, 5], 1) should return [4, 1, 2, 3, 5].
frankenSplice([1, 2], ["a", "b"], 1) should return ["a", 1, 2, "b"].

将arr2用slice剪切,存入变量,splice进行插入

function frankenSplice(arr1, arr2, n) {
  let arrCopy = arr2.slice();
  arrCopy.splice(n, 0, ...arr1);
  return arrCopy;
}
console.log(frankenSplice([1, 2, 3], [4, 5, 6], 1));

八、Falsy Bouncer 过滤假值

假值:undefined  null  false  NaN   0    +0   -0    ' '   " "

提示和要求:

Remove all falsy values from an array.

Falsy values in JavaScript are false, null, 0, "", undefined, and NaN.

Hint: Try converting each value to a Boolean.

bouncer([7, "ate", "", false, 9]) should return [7, "ate", 9].
bouncer(["a", "b", "c"]) should return ["a", "b", "c"].
bouncer([false, null, 0, NaN, undefined, ""]) should return [].
bouncer([1, null, NaN, 2, undefined]) should return [1, 2]

1.判断数组中每项是否为布尔值   !!arr[i]==true

function bouncer(arr) {
  // Don't show a false ID to this bouncer.
  let newArr=[];
  for(let i=0;i<arr.length;i++){
    if(!!arr[i]==true){
       newArr.push(arr[i]); 
    }
  }
  return newArr;
}
bouncer([7, "ate", "", false, 9]);

2.用 filter 过滤掉布尔值

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

 filter 返回一个过滤筛选后的新数组

 return arr.filter(function(values

return !!values;

})

 转换为字符串  
toString() var found=true; found.toString(); null,undefined没有此方法  
String String(10); null 返回“null”,undefined=>"undefined"  

九、Where do I Belong

返回小于num的的个数

function getIndexToIns(arr, num) {
 let count=0;
 for(let i=0;i<arr.length;i++){
  if(arr[i]<num){
   count++;
   }
 }
  return count;
}
getIndexToIns([40, 60], 50);

十、Chunky Monkey(矮胖猴????)

 题目要求:

chunkArrayInGroups(["a", "b", "c", "d"], 2)should return [["a", "b"], ["c", "d"]].

chunkArrayInGroups([0, 1, 2, 3, 4, 5], 3)should return [[0, 1, 2], [3, 4, 5]].

for循环的索引 间隔是 size,不是 1

function chunkArrayInGroups(arr, size) {
  let newArr=[];
  for(let i=0;i<arr.length;i+size){
    newArr.push(arr.splice(i,size))
  }
  return newArr;
}

chunkArrayInGroups([0, 1, 2, 3, 4, 5], 3)

其中for循环也可写成

 for(let i=0;i<arr.length;){
  
  }

但是省略部分是 i+size不是i++

.

脑阔疼

猜你喜欢

转载自blog.csdn.net/qq_40642021/article/details/81197401