2019-5-24 JS基础算法题(二)
记录在FreeCodeCamp中遇到的Javascript基础算法题
11.比较字符串
如果数组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true。
举例,["hello", "Hello"] 应该返回true,因为在忽略大小写的情况下,第二个字符串的所有字符都可以在第一个字符串找到。
- function mutation(arr) {
- for(var i=0;i<arr[1].length;i++){
- if(arr[0].toLowerCase().indexOf(arr[1][i].toLowerCase()) < 0){
- return false;
- }
- }
- return true;
- }
- mutation(["hello", "hey"]);
12.过滤数组假值
删除数组中的所有假值。
在JavaScript中,假值有false、null、0、""、undefined 和 NaN。
- function bouncer(arr) {
- arr = arr.filter(function(item){
- return Boolean(item) === true;
- });
- return arr;
- }
- bouncer([7, "ate", "", false, 9]);
13.摧毁数组
实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值。
- function destroyer(arr) {
- var args = Array.from(arguments);
- args.splice(0,1);
- arr = arr.filter(function(item){
- if(args.indexOf(item)<0){
- return item;
- }
- });
- return arr;
- }
- destroyer([1, 2, 3, 1, 2, 3], 2, 3);
知识点:Arguments object
14.数组排序并找出元素索引
先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引
- function where(arr, num) {
- arr.push(num);
- arr.sort(function(a,b){
- return a-b;
- });
- var index = arr.indexOf(num);
- return index;
- }
- where([40, 60], 50);
知识点:Array.sort()
15.凯撒密码
风靡全球的凯撒密码Caesar cipher,又叫移位密码。
移位密码也就是密码中的字母会按照指定的数量来做移位。
一个常见的案例就是ROT13密码,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔ 'O',以此类推。
写一个ROT13函数,实现输入加密字符串,输出解密字符串。
所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,跳过它们。
- function rot13(str) { // LBH QVQ VG!
- var newWord = "";
- for (var i = 0; i < str.length; i++) {
- var N = 13;
- var wordIndex = str.charCodeAt(i);
- if (wordIndex + N > 90) {
- N = N - 26;
- }
- if (wordIndex > 90 || wordIndex < 65) {
- newWord += str[i];
- } else {
- newWord += String.fromCharCode(wordIndex + N);
- }
- }
- return newWord;
- }
- rot13("SERR PBQR PNZC"); // FREE CODE COMP
16.Sum All Numbers in a Range
一个包含两个数字的数组。返回这两个数字和它们之间所有数字的和。
- function sumAll(arr) {
- function add(runningTotal,currentValue){
- return runningTotal+currentValue;
- }
- var min = Math.min(arr[0],arr[1]); //返回一组数中的最小值;
- var max = Math.max(arr[0],arr[1]); //返回一组数中的最大值;
- var i = min + 1;
- while(i < max ){
- arr.push(i);
- i++;
- }
- return arr.reduce(add); //累加
- }
- sumAll([1, 4]);