手记

JavaScript算法初级练习

题目来自: FreeCodeCamp BasicAlgorithmScripting
参考资料: JavaScript标准库

  • 需要定义一个最小值和一个最大值之间的随机数
<script>
function ourFunction(ourMin, ourMax) {

  return Math.floor(Math.random() * (ourMax - ourMin + 1)) + ourMin;
}

ourFunction(1, 9);
</script>
  • 计算一个整数的阶乘
function factorialize(num) {
  // 请把你的代码写在这里
  if(num <= 1) {
    return 1;
  } else {
    return num *= factorialize(num - 1);
  }

}

factorialize(5);
//方法一
function palindrome(str) {
  // 请把你的代码写在这里
  var re = /[\W_]/g;

  var lowRegStr = str.toLowerCase().replace(re, '');
  var reveRegStr = lowRegStr.split('').reverse().join('');
  return lowRegStr == reveRegStr;
}

palindrome("eye");

//方法二
function palindrome(str) {
  // 请把你的代码写在这里
  var re = /[\W_]/g;

  var lowRegStr = str.toLowerCase().replace(re, '');
  for(var i=0, l=lowRegStr.length; i<l/2; i++) {
    if(lowRegStr[i] != lowRegStr[l - 1 -i]) {
      return false;
    }
  }
  return true;
}

palindrome("eye");

function findLongestWord(str) {
  var strArr = str = str.split(' ');
  var newArr = [];
  for(var i=0;i<strArr.length; i++) {
    newArr.push(strArr[i].length);
  }
  newArr.sort(function(a, b) {
     return b - a;
  });
  return newArr[0];
}

findLongestWord("What if we try a super-long word such as otorhinolaryngology");
  • 确保字符串的每个单词首字母都大写,其余部分小写。
function titleCase(str) {
  var strArr = str.split(' ');
  var newStrArr = [];
  var newStr = '';
  for(var i=0; i<strArr.length; i++) {
    newStr = strArr[i][0].toUpperCase();
    newStr += strArr[i].substr(1).toLowerCase();
    newStrArr.push(newStr);
  }

  newStrArr = newStrArr.join(' ');

  return newStrArr;
}

titleCase("I'm a little tea pot");
  • 找出多个数组中的最大数
function largestOfFour(arr) {
  var newArr = [];
  var num = [];
  for(var i=0; i<arr.length; i++) {
    num = arr[i].sort(function(a, b) {
      return b - a;
    });
    newArr.push(num[0]);
  }
  return newArr;
}

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
  • 判断一个字符串(str)是否以指定的字符串(target)结尾。
function confirmEnding(str, target) {
  var len = target.length;
  if(str.substr(-len) == target) {
    return true;
  } else {
    return false;
  }

}

confirmEnding("He has to give me a new name", "name");
confirmEnding("Bastian", "n");
  • 重复一个指定的字符串 num次,如果num是一个负数则返回一个空字符串。
function repeat(str, num) {
  // 请把你的代码写在这里
  var newArr = [];
  var newStr = '';
  if(num < 0) {
    newStr = '';
  } else {
    for(var i=0; i<num; i++) {
      newArr.push(str);
    }
    newStr = newArr.join('');
  }
  return newStr;
}

repeat("abc", 4);
  • 如果字符串的长度比指定的参数num长,则把多余的部分用...来表示。切记,插入到字符串尾部的三个点号也会计入字符串的长度。但是,如果指定的参数num小于或等于3,则添加的三个点号不会计入字符串的长度。
function truncate(str, num) {
  var newStr='';
  if(num >= str.length) {
    newStr = str.slice(0);
  } else if(num > 3) {
    newStr = str.slice(0, num-3) + '...';
  } else {
    newStr = str.slice(0, num) + '...';
  }
  return newStr;
}

truncate("A-tisket a-tasket A green and yellow basket", 11);
function chunk(arr, size) {
  var newArr = [];
  for(var i=0; i<arr.length; i+=size) {
    newArr.push(arr.slice(i, i+size));
  }
  return newArr;
}

chunk(["a", "b", "c", "d"], 2);
  • 返回一个数组被截断n个元素后还剩余的元素,截断从索引0开始。
function slasher(arr, howMany) {
  arr.splice(0, howMany);
  return arr;
}

slasher([1, 2, 3], 2);
  • 如果数组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true。
function mutation(arr) {
  var str1 = arr[0].toLowerCase();  
  var str2 = arr[1].toLowerCase();
  for(var i=0; i<str2.length; i++) {
    if(str1.indexOf(str2[i]) == -1) {
      return false;
    }

  }
  return true;
}

mutation(["hello", "hey"]);
  • 删除数组中的所有假值。
function bouncer(arr) {
  var newArr = [];
  newArr = arr.filter(function(val) {
    if(val !== (undefined && null && "" && NaN && false && 0)) {
      return val;
    }
  });
  return newArr;
}

bouncer([7, "ate", "", false, 9]);
  • 数组排序并找出元素索引,先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。
function where(arr, num) {
  arr.push(num);
  arr.sort(function(a, b) {
    return a-b;
  });  
  return arr.indexOf(num);
}

where([40, 60], 50);
function destroyer(arr) {
  var newArr = [];
  var arg = arguments;
  for(var i=1; i<arg.length; i++) {
    newArr.push(arg[i]);
  }
  arr = arr.filter(function(val) {
    return newArr.indexOf(val) < 0;
  });
  return arr;
}

destroyer([1, 2, 3, 1, 2, 3], 2, 3);
1人推荐
随时随地看视频
慕课网APP