从摄氏转换为华氏的公式是,摄氏温度乘以 9/5
,再加上 32
。
思路:直接按照公式套就可以了
解题:
function convertToF(celsius) {
let fahrenheit=celsius*(9/5)+32;
return fahrenheit;
}
convertToF(30);
请反转传入函数的字符串,函数的返回结果也应为字符串。
思路:
方法一:直接for循环遍历字符串
方法二:
① 把字符串转为数组,用split方法;
② 使用数组的reverse方法将数组元素反转
③ 使用join方法把数组转为字符串
解题:
方法一
function reverseString(str) {
let reversedStr = "";
for (let i = str.length - 1; i >= 0; i--) {
reversedStr += str[i];
}
return reversedStr;
}
reverseString("hello");
方法二
function reverseString(str) {
let strArr = str.split('');
strArr = strArr.reverse().join('');
return strArr;
}
reverseString("hello");
console.log(reverseString("hello"))
返回一个给定整数的阶乘计算结果。
思路:使用递归的思想,依次调用函数,直到num=1
解题:
function factorialize(num) {
return num > 0 ? num * factorialize(num - 1) : 1;
}
factorialize(5);
返回给出的句子中,最长单词的长度。
要求实例:
输入:findLongestWordLength(“The quick brown fox jumped over the lazy dog”)
输出 :6
输入:findLongestWordLength(“What if we try a super-long word such as otorhinolaryngology”)
输出:19
思路:
① 把字符串转为数组,用split方法;
② 遍历数组
③ 比较数组元素的长度
解题:
function findLongestWordLength(str) {
let words = str.split(' ');
let LongestWordLength = 0;
for (let i = 0; i < words.length; i++) {
if (words[i].length > LongestWordLength) {
LongestWordLength = words[i].length;
}
}
return LongestWordLength;
}
findLongestWordLength("The quick brown fox jumped over the lazy dog");
console.log(findLongestWordLength("The quick brown fox jumped over the lazy dog"))
请返回一个数组,该数组由参数中每个子数组中的最大数字组成
要求实例:
输入:largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]])
输出:[27, 5, 39, 1001]
思路:
① 定义一个新的数组result用于存最大值
② 遍历数组,将数组arr里的子数组的第一个元素值赋给maxNumber
③ 遍历每一个子数组,进行判断比较,后找出最大的元素赋值给maxNumber最后放入数组result中。
解题:
function largestOfFour(arr) {
const result = [];
for (let i = 0; i < arr.length; i++) {
let maxNumber = arr[i][0];
for (let j = 1; j < arr[i].length; j++) {
if (arr[i][j] > maxNumber) {
maxNumber = arr[i][j];
}
}
result[i] = maxNumber;
}
return result;
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
console.log(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]))
检查字符串(第一个参数 str)是否以给定的目标字符串(第二个参数 target)结束。
要求实例:
输入:confirmEnding(“Congratulation”, “on”)
输出:true
思路:
方法一:
① 使用slice方法,截取指定的元素
②判断截取的元素是否与目标字符串全等,全等返回true,否则返回false
方法二:直接使用正则表达式,正则表达式$表示”以什么结尾“
方法三:直接用endsWith方法来判断某字符串是否是某字符串的末尾字符
解题:
方法一:
function confirmEnding(str, target) {
if (str.slice(str.length - target.length) === target) {
//if (str.slice(- target.length) === target)
return true
}
return false;
}
confirmEnding("Bastian", "n");
console.log(confirmEnding("Bastian", "n"))
方法二:
function confirmEnding(str, target) {
const regexp = new RegExp(target + '$')
return regexp.test(str);
}
confirmEnding("Bastian", "n");
console.log(confirmEnding("Bastian", "n"))
方法三:
function confirmEnding(str, target) {
if(str.endsWith(target)) {
return true;
}else{
return false;
}
}
将一个给定的字符串 str(第一个参数)重复输出 num(第二个参数)次。 如果 num 不是正数,返回空字符串。
思路:
方法一:创建一个空串,然后使用for循环,将str累加到accumulatedStr
方法二:使用三元目运算符和递归的思想
方法三:用方法repeat,里面填需要复制的次数
解题:
将一个给定的字符串 str
(第一个参数)重复输出 num
(第二个参数)次。 如果 num
不是正数,返回空字符串。
function repeatStringNumTimes(str, num) {
//方法一
// let accumulatedStr = "";
// for (let i = 0; i < num; i++) {
// accumulatedStr += str;
// }
// return accumulatedStr;
//方法二
return num>0?str+repeatStringNumTimes(str, num-1):""
}
repeatStringNumTimes("abc", 3);
console.log(repeatStringNumTimes("abc", 3))
方法三:
function repeatStringNumTimes(str, num) {
if(num <=0) {
str = "";
}else{
str = str.repeat(num);
}
return str;
}
如果传入的字符串(第一个参数)的长度大于传入的值(第二个参数),请在这个位置截断它, 并在后面加上 …,然后返回结果。
要求实例:
输入:truncateString(“A-tisket a-tasket A green and yellow basket”, 8)
输出:A-tisket…
思路: 先比较字符串的长度和num的大小,然后用slice的方法截取字符串拼接’…’
解题:
function truncateString(str, num) {
if (str.length > num) {
return str.slice(0, num) + "...";
} else {
return str;
}
// return str.length > num ? str.slice(0, num) + "..." : str;
}
truncateString("A-tisket a-tasket A green and yellow basket", 8);
console.log(truncateString("A-tisket a-tasket A green and yellow basket", 8))
请写一个函数来检查数组(第一个参数 arr
)中的元素,并返回数组中第一个通过校验测试的元素。 其中,“通过校验测试”指的是对于数组中的一个元素 x
,若 func(x)
返回的结果为 true
,则校验测试通过。 如果没有元素通过测试,请返回 undefined
。
要求实例:
输入: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
思路:遍历过滤,即遍历数组,然后调用函数判断,有则输出,没有则返回undefined
解题:
function findElement(arr, func) {
for (let i = 0; i < arr.length; i++) {
if (func(arr[i])) {
return arr[i];
}
}
return undefined
}
findElement([1, 2, 3, 4], num => num % 2 === 0);
console.log(findElement([1, 2, 3, 4], num => num % 2 === 0))
检查一个值是否是基本类型中的布尔值(boolean)类型。 函数应返回 true
或者 false
。
基本类型中的布尔值为 true
或者 false
。
思路:一种是直接判断参数是否为true或者false,另一种则是使用typeof方法来判断是否为‘boolbean’
解题:
function booWho(bool) {
// return bool === true || bool === false ? true : false;
return typeof (bool) == "boolean"
}
booWho(null);
console.log(booWho(null))
请将传入的字符串中,每个单词的第一个字母变成大写并返回。 注意除首字母外,其余的字符都应是小写的。
要求实例:
输入:titleCase(“I’m a little tea pot”)
输出:I’m A Little Tea Pot
思路:
① 把字符串转为数组,用split方法;
②遍历数组,先全部转为小写,再转首字符为大写
③使用join方法拼接成字符串
解题:
function titleCase(str) {
let strArr = str.split(' ');
for (let i = 0; i < strArr.length; i++) {
strArr[i] = strArr[i].toLowerCase().split('');
strArr[i][0] = strArr[i][0].toUpperCase();
strArr[i] = strArr[i].join('');
}
return strArr.join(' ');
}
titleCase("I'm a Little tea pot");
console.log(titleCase("I'm a Little tea pot"))
将第一个数组中的所有元素依次复制到第二个数组中。
需要从第二个数组索引值为 n
的地方开始插入。
最后,请返回插入元素后的数组。 作为输入参数的两个数组在函数执行前后应保持不变。
要求实例:
输入:frankenSplice([1, 2, 3], [4, 5], 1)
输出: [4, 1, 2, 3, 5]
输入:frankenSplice([1, 2, 3, 4], [], 0)
输出:[1, 2, 3, 4]
函数运行后,第一个数组应保持不变。
函数运行后,第二个数组应保持不变。
思路:
①因为题目有要求数组应保持不变,所以用数组的slice方法复制出array;
②循环遍历arr1,依次将arr1里的元素插入到array里,此处用到了splice方法,题目要求“按照顺序插入”,所以n坐标要递增。
解法:
function frankenSplice(arr1, arr2, n) {
let array = arr2.slice();
for (let i = 0; i < arr1.length; i++) {
array.splice(n, 0, arr1[i]);
n++;
}
return array;
}
frankenSplice([1, 2, 3], [4, 5, 6], 1);
console.log(frankenSplice([1, 2, 3], [4, 5, 6], 1))
从数组中移除所有假值(falsy values)。
JavaScript 中的假值有 false
、null
、0
、""
、undefined
、NaN
。
要求实例:
输入:bouncer([7, “ate”, “”, false, 9])
输出:[7, “ate”, 9]
思路:
方法一:新建一个临时数组,遍历数组里的每一项,判断其布尔值是否为true,然后将true项放入临时数组里。
解法:
function bouncer(arr) {
let array = [];
for (let i = 0; i < arr.length; i++) {
if (Boolean(arr[i]) === true) {
array.push(arr[i]);
}
}
return array;
}
bouncer([7, "ate", "", false, 9]);
console.log(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)。
思路:用数组sort方法,把数组排序,然后遍历数组,若元素大于等于num,则返回其下标。
解题:
function getIndexToIns(arr, num) {
arr.sort((a, b) => a - b);
for (let i = 0; i < arr.length; i++) {
if (arr[i] >= num)
return i;
}
return arr.length;
}
getIndexToIns([40, 60], 50);
console.log(getIndexToIns([40, 60], 50))
如果数组里的第一个字符串包含了第二个字符串中的所有字母,则返回 true
。
例如,["hello", "Hello"]
应该返回 true
。因为在忽略大小写的情况下,第一个字符串包含了第二个字符串里出现的所有字母。
["hello", "hey"]
应该返回 false
。因为 hello
并不包含字符 y
。
最后,["Alien", "line"]
应该返回 true
。因为 line
中的所有字母都出现在了 Alien
中。
思路:因为题目要求忽略大小写,所以先转为小写,遍历test字符串,如果target字符串里不包含test字符串的字符就返回false,返回true。也可以写成target.indexOf(test[i]) == -1
解法:
function mutation(arr) {
let target = arr[0].toLowerCase();
let test = arr[1].toLowerCase();
for (let i = 0; i < test.length; i++) {
if (target.indexOf(test[i]) < 0) {
return false;
}
}
return true;
}
mutation(["hello", "hey"]);
console.log(mutation(["hello", "hey"]))
请编写一个函数,该函数将一个数组(第一个参数)拆分成若干长度为 size
(第二个参数)的子数组,并将它们作为二维数组返回。
要求实例:
输入:chunkArrayInGroups([“a”, “b”, “c”, “d”], 2)
输出:[[“a”, “b”], [“c”, “d”]]
思路:创建一个数组用于存储分割的数组元素,遍历原数组,用slice方法分割,每分割一次就把这些值放到新数组里 。
解法:
function chunkArrayInGroups(arr, size) {
let newArr = [];
for (let i = 0; i < arr.length; i += size) {
newArr.push(arr.slice(i, i + size));
}
return newArr;
}
chunkArrayInGroups(["a", "b", "c", "d"], 2);
console.log(chunkArrayInGroups(["a", "b", "c", "d"], 2))