关于javascript:FreeCodeCampJavaScript初级算法题2

37次阅读

共计 3698 个字符,预计需要花费 10 分钟才能阅读完成。

接着上篇文章持续写。
5、找出多个数组中的最大数字
输出:largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]])
输入:[27, 5, 39, 1001]
解法:

function largestOfFour(arr) {let temp = [];
  for(let i =0;i<arr.length;i++) {temp.push(Math.max(...arr[i]));
  }
  return temp;
}

思路:
题目给出的是数组中的数组,要求算出每个外部数组里的最大值再组成一个数组返回。
首先 定义一个新的数组用于存最大值,其次遍历大数组 arr 里的小数组,用 Math.max 办法找最大值,再 push 到新数组里。

6、确认结尾
查看字符串(第一个参数 str)是否以给定的指标字符串(第二个参数 target)完结。
输出:confirmEnding(“Congratulation”, “on”)
输入:true
解法一:

function confirmEnding(str, target) {
  let len = target.length;
  if(str.substring(str.length-len)=== target){return true;}else{return false;}
}

思路:
判断字符串是否以某字符串结尾,首先想到 js 里的 substring 办法,那么 substring 的话就想到字符串开端的话,那不就是倒数的子串吗,所以要先算出指标子串的大小,而后再用 substring 的办法确认倒数的子串是否和指标字符串一样,一样的话就返回 true,反之 false。
知识点:字符串的 substring 办法,substring(str.length-x)示意从倒数第 x 个索引到开端的字符。

解法二:

function confirmEnding(str, target) {if(str.endsWith(target)) {return true;}else{return false;}
}

思路:解法二就比较简单了,间接用 js 内置的 endsWith 办法来判断某字符串是否是某字符串的开端字符就能够了,然而题目要求了不要用.endsWith 办法,所以第一种 substring 就挺好。

7、反复输入字符串
将一个给定的字符串 str(第一个参数)反复输入 num(第二个参数)次。如果 num 不是负数,返回空字符串。在这个挑战中,请不要应用 JavaScript 内置的 .repeat() 办法。
解法一:

function repeatStringNumTimes(str, num) {
  let temp = str;
  if(num <=0) {str = "";}
  for(let i = 0;i<num-1;i++)  {str +=temp;}
  return str;
}

思路:
最笨的思路,反复输入的话就遍历次数反复累加下来呗,首先把字符串赋值给一个长期变量,而后依据 num- 1 遍历复制的次数,累加到 str 下来。
解法二:

function repeatStringNumTimes(str, num) {if(num <=0) {str = "";}else{str = str.repeat(num);
  }
  return str;
  
}

思路:
解法二用到的是题目不让用的办法 repeat,外面填须要复制的次数即可。
知识点:repeat 办法

8、截断字符串
如果传入的字符串(第一个参数)的长度大于传入的值(第二个参数),请在这个地位截断它,并在前面加上 …,而后返回后果。
输出:truncateString(“A-tisket a-tasket A green and yellow basket”, 8)
输入:A-tisket..

解法:

function truncateString(str, num) {if(str.length >num){str = str.slice(0,num)+'...';
  }
  return str;
}

思路:
先比拟字符串的长度和 num 的大小,而后用 slice 的办法截取字符串在用 + 拼接’…’

9、按参数过滤数组
输出:findElement([1, 3, 5, 8, 9, 10], function(num) {return num % 2 === 0;})
输入:8
输出:findElement([1, 3, 5, 9], function(num) {return num % 2 === 0;})
输入:undefined
解法:

function findElement(arr, func) {for(let i = 0;i<arr.length;i++) {if(func(arr[i])){return arr[i];
    }
    if(i==arr.length-1 && func(arr[i]) === false ){return undefined;}
  }
}

思路:
就遍历过滤,最笨的办法,后续有好思路再更新。
10、根本类型布尔值的查看
查看一个值是否是根本类型(boolean)类型,返回 true 或 false
解法:

function booWho(bool) {if(typeof bool === "boolean"){return true;}else{return false;}
}

11、句中单词首字母大写
请将传入的字符串中,每个单词的第一个字母变成大写并返回。留神除首字母外,其余的字符都应是小写的。
输出:titleCase(“I’m a little tea pot”)
输入:I’m A Little Tea Pot

解法:

function titleCase(str) {var lowerStr = str.toLowerCase();  // 先全副转为小写
            var splitArr = lowerStr.split(' ');      // 拆分成数组
            for(var i=0;i<splitArr.length;i++){splitArr[i] = splitArr[i][0].toUpperCase()+splitArr[i].substring(1,splitArr[i].length); // 循环,并对每一项赋值
            }
            str = splitArr.join(' ');     // 拼接成字符串
            return str;
        }

12、Slice 与 Splice
本挑战的输出参数为两个数组和一个索引值。
将第一个数组中的所有元素顺次复制到第二个数组中。
请留神,你须要从第二个数组索引值为 n 的中央开始插入。
最初,请返回插入元素后的数组。作为输出参数的两个数组在函数执行前后应放弃不变。
输出:frankenSplice([1, 2, 3], [4, 5], 1)
输入:[4, 1, 2, 3, 5]
输出:frankenSplice([1, 2, 3, 4], [], 0)
输入:[1, 2, 3, 4]
函数运行后,第一个数组应放弃不变。
函数运行后,第二个数组应放弃不变。
解法一:

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

思路:①因为题目有要求“第二个数组应放弃不变”,所以用数组的 slice 办法基于 arr2 复制出 localArray,用 localArray 实现题目要求;
②循环遍历 arr1,顺次将 arr1 里的元素插入到 localArray 里,此处用到了 splice 办法,留神题目要求“依照程序插入”,所以 n 坐标要递增。
知识点:Array 的两个办法 =》slice,splice
Slice(start,end): 相当于数组的浅拷贝,不扭转原数组值,[start,end)从 start 开始,不蕴含 end,若不填值,则示意全副复制,其中 end 是可选的,若只填 start,则示意从 start 开始到开端,
Splice(start,count,item): 删除或插入元素, 会扭转原数组,start 示意开始索引,count 示意要删除元素的数量,item 要是有值就示意插入的值(item 能够不止一个),要想插入元素,count 就设置为 0。
横开展:解法一的第②步用的办法是 n 坐标递增,还有一种办法是倒序循环,这样 n 就不必递增了,如下所示:

function frankenSplice(arr1, arr2, n) {let localArray = arr2.slice();
  for(let i=arr1.length-1;i>=0;i--){localArray.splice(n, 0, arr1[i]);
  }
  return localArray;
}

解法二:

function frankenSplice(arr1, arr2, n) {let localArr = arr2.slice();
  localArr.splice(n, 0, ...arr1);
  return localArr;
}

思路:跟解法一的思维一样,只是把循环替换成了 spread 操作符,间接用…arr1 就插入到 localArr 里了。

后续也会接着写。

正文完
 0