接着上篇文章继续写。
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里了。
后续也会接着写。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。