精华内容
参与话题
问答
  • freecodecamp

    2018-09-06 13:44:53
    今天无意间在某个网站发现了freecodecamp这个学习平台,不知道能在这个平台学到多少关于前端的知识,很期待... 到目前为止这个平台给我这个用户的体验感受就是,有点意思!通过关卡模式让想学习的人一层一层破关前进...

    今天无意间在某个网站发现了freecodecamp这个学习平台,不知道能在这个平台学到多少关于前端的知识,很期待…
    到目前为止这个平台给我这个用户的体验感受就是,有点意思!通过关卡模式让想学习的人一层一层破关前进。因为本人有开发的经验,想尝试把前端学好一点,成为一个在这方面让自己有自信的人,前几关很基础,但就算是给我巩固一遍基础知识了!希望以后在这个平台能真正学到东西,如果大家有接触过这个平台的,看到这篇博文,希望可以和我交流一下!
    这里写图片描述

    展开全文
  • freeCodeCamp

    2018-08-17 10:46:22
    Reverse the provided string. You may need to turn the string into an array before you can reverse it. Your result must be a string function reverseString(str) { return str; } reverseString("...

    Reverse the provided string.

    You may need to turn the string into an array before you can reverse it. Your result must be a string

    function reverseString(str) {
        return str;
    }
    reverseString("hello");
    复制代码
    • answer
    1.
    function reverseString(str) {
        return str.split("").reverse().join("");
    }
    reverseString("hello");
    2.
    function reverseString(str) {
        var newString = "";
        for (var i = str.length - 1; i >= 0; i--) {
            newString += str[i];
        }
        return newString;
    }
    reverseString('hello');
    3.
    function reverseString(str) {
      return (str === '') ? '' : reverseString(str.substr(1)) + str.charAt(0);
    }
    reverseString("hello");
    复制代码

    计算一个整数的阶乘

    如果用字母n来代表一个整数,阶乘代表着所有小于或等于n的整数的乘积。

    阶乘通常简写成 n!

    例如: 5! = 1 * 2 * 3 * 4 * 5 = 120

    • answer
    1.
    function factorialize(num) {
        if (num < 0)
            return -1;
        else if (num == 0)
            return 1;
        else {
            return (num * factorialize(num - 1));
        }
    }
    2.
    function factorialize(num) {
       let result = num
        if(num < 0 || num ===1) {
           return 1
        }
        while (num > 1) {
           num--;
           result*= num
        }
        return result
    }
    3.
    function factorialize(num) {
      if (num === 0 || num === 1)
        return 1;
      for (var i = num - 1; i >= 1; i--) {
        num *= i;
      }
      return num;
    }
    factorialize(5);
    复制代码

    Check for Palindromes

    function palindrome(str) {
      return true;
    }
    
    palindrome("eye");
    复制代码
    • answer
    1.
    function palindrome(str) {
      var re = /[\W_]/g;
      var lowRegStr = str.toLowerCase().replace(re, '');
      var reverseStr = lowRegStr.split('').reverse().join(''); 
      return reverseStr === lowRegStr;
    }
    palindrome("A man, a plan, a canal. Panama");
    2.
    function palindrome(str) {
     var re = /[^A-Za-z0-9]/g;
     str = str.toLowerCase().replace(re, '');
     var len = str.length;
     for (var i = 0; i < len/2; i++) {
       if (str[i] !== str[len - 1 - i]) {
           return false;
       }
     }
     return true;
    }
    palindrome("A man, a plan, a canal. Panama");
    复制代码

    Find the Longest Word in a String

    function findLongestWord(str) {
      return str.length;
    }
    
    findLongestWord("The quick brown fox jumped over the lazy dog");
    复制代码
    • answer
    function findLongestWord(str) {
        var maxlength = 0;
        var maxStr = '';
        str.split(' ').forEach((item) => {
           item.length > maxlength ? maxlength = item.length : null;
        });
        return maxlength;
    }
    findLongestWord("The quick brown fox jumped over the lazy dog");
    
    复制代码

    Title Case a Sentence

    function titleCase(str) {
      return str;
    }
    
    titleCase("I'm a little tea pot");
    复制代码
    • answer
    function titleCase(str) {
        str = str.toLowerCase().split(' ').map((word) => {
          return word.charAt(0).toLocaleUpperCase() + word.slice(1)
        })
        return str.join(' ')
    }
    console.log(titleCase("I'm a little tea pot"));
    复制代码

    Return Largest Numbers in Arrays

    function largestOfFour(arr) {
    
      return arr;
    }
    
    largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
    复制代码
    • answer
    1. 
    function largestOfFour(mainArray) {
        return mainArray.map(function (subArray){
            return subArray.reduce(function (previousLargestNumber, currentLargestNumber) {
                return (currentLargestNumber > previousLargestNumber) ? currentLargestNumber : previousLargestNumber;
            }, 0);
        });
    }
    console.log(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]));
    2.
    function largestOfFour(mainArray) {
      return mainArray.map(function(subArray) {
        return Math.max.apply(null, subArray);
      });
    }
    largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
    
    tips:
    - Math,max可以传递任意数量的参数返回最大值.
    - console.log(Math.max(4,5,1,3)); // logs 5
    - 但是不能把一串数组直接传递像这样:
    - var num = [4,5,1,3];
    - console.log(Math.max(num)); // logs NaN
    - 这里借用apply方法
    - var num = [4,5,1,3];
    - console.log(Math.max.apply(null, num)); // logs 5
    复制代码

    Confirm the Ending

    判断一个字符串(str)是否以指定的字符串(target)结尾。

    如果是,返回true;如果不是,返回false。

    function confirmEnding(string, target) {
      return string;
    }
    confirmEnding("Bastian", "n");
    
    Provided test cases
    confirmEnding("He has to give me a new name", "name") 应该返回 true.
    confirmEnding("He has to give me a new name", "me") 应该返回 true.
    复制代码
    • answer
    1.
    function confirmEnding(string, target) {
     return (string.substr(-target.length) === target) ? true : false;
    }
    confirmEnding('Bastian', 'n');
    2.
    function confirmEnding(string, target) {
      return string.substr(-target.length) === target;
    }
    confirmEnding('Bastian', 'n');
    3.
    function confirmEnding(string, target) {
      return string.endsWith(target); // 'Bastian'.endsWith('n')
    }
    confirmEnding('Bastian', 'n');
    复制代码

    Repeat a string repeat a string

    重复一个指定的字符串 num次,如果num是一个负数则返回一个空字符串。

    function repeat(str, num) {
      return str;
    }
    
    repeat("abc", 3);
    复制代码
    • answer
    1.
    function repeat(str, num) {
        if (num <= 0) {
            return ''
        }
        let newStr = []
        for (var i = 0; i < num; i++) {
            newStr.push(str)
        }
        return newStr.join('');
    }
    console.log(repeat("abc", 3))
    2.
    function repeatStringNumTimes(string, times) {
      var repeatedString = "";
      while (times > 0) {
        repeatedString += string;
        times--;
      }
      return repeatedString;
    }
    repeatStringNumTimes("abc", 3);
    3.
    function repeatStringNumTimes(string, times) {
      if(times < 0) 
        return "";
      if(times === 1) 
        return string;
      else 
        return string + repeatStringNumTimes(string, times - 1);
    }
    repeatStringNumTimes("abc", 3);
    4.
    function repeatStringNumTimes(string, times) {
      return times > 0 ? string.repeat(times) : "";
    }
    repeatStringNumTimes("abc", 3);
    复制代码

    Truncate a string

    function truncate(str, num) {
      return str;
    }
    
    truncate("A-tisket a-tasket A green and yellow basket", 11);
    复制代码

    如果字符串的长度比指定的参数num长,则把多余的部分用...来表示。

    切记,插入到字符串尾部的三个点号也会计入字符串的长度。

    但是,如果指定的参数num小于或等于3,则添加的三个点号不会计入字符串的长度。

    function truncateString(str, num) {
        if(num <=3){
            return str.slice(0,num) + '…';
        }
        if (num >= str.length){
            return str
        }
        return str.slice(0,num-3) + '…';
    }
    truncateString('A-tisket a-tasket A green and yellow basket', 11);
    复制代码

    Chunky Monkey

    function chunk(arr, size) {
      return arr;
    }
    chunk(["a", "b", "c", "d"], 2);
    复制代码

    把一个数组arr按照指定的数组大小size分割成若干个数组块。

    例如:chunk([1,2,3,4],2)=[[1,2],[3,4]];

    chunk([1,2,3,4,5],2)=[[1,2],[3,4],[5]]

    1. 
    function chunk(arr, size) {
        var temp = [];
        var result = [];
    
        for (var a = 0; a < arr.length; a++) {
      //a % size = 0,1,2,0
            if (a % size !== size - 1) {
                temp.push(arr[a])
            }
            else {
                temp.push(arr[a]);
                result.push(temp);
                temp = [];
            }
        }
        if (temp.length !== 0)
            result.push(temp);
        return result;
    }
    //  temp = [], result = []  size = 3
    // 1. a % size = 0,1,2,0 => if(a % size != 2)  temp = [a,b]
    // 2. temp = [a,b,c]  reslut = [[a,b,c]]
    // 3. temp = []  temp = [d] result.push(temp) => result = [[a,b,c],[d]]
    chunk(["a", "b", "c", "d"], 3)
    2.
    function chunk(arr, size) {
      var newArr = [];
      var i = 0;
      while (i < arr.length) {
        newArr.push(arr.slice(i, i+size));
        i += size;
      }
      return newArr;
    }
    chunk(["a", "b", "c", "d"], 2); //[ [ 'a', 'b' ], [ 'c', 'd' ] ]
    复制代码

    Slasher Flick

    function slasher(arr, howMany) {
    
      return arr;
    }
    
    slasher([1, 2, 3], 2);
    复制代码

    截断数组

    返回一个数组被截断n个元素后还剩余的元素,截断从索引0开始。

    function slasher(arr, howMany) {
        var newArr = arr.slice(howMany);
        return newArr;
    }
    
    slasher([1, 2, 3], 2);  //[ 3 ]
    复制代码

    Mutations

    function mutation(arr) {
    
      return arr;
    }
    
    mutation(["hello", "hey"]);
    复制代码

    比较字符串

    (蛤蟆可以吃队友,也可以吃对手)

    如果数组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true。

    举例,["hello", "Hello"]应该返回true,因为在忽略大小写的情况下,第二个字符串的所有字符都可以在第一个字符串找到。

    ["hello", "hey"]应该返回false,因为字符串"hello"并不包含字符"y"。

    ["Alien", "line"]应该返回true,因为"line"中所有字符都可以在"Alien"找到。

    1.
    function mutation(arr) {
      var test = arr[1].toLowerCase();
      var target = arr[0].toLowerCase();
      for (i=0;i<test.length;i++) {
        if (target.indexOf(test[i]) === -1)
          return false;
      }
      return true;
     }
     
    2.
    function mutation(arr) {
      return arr[1].toLowerCase()
        .split('')
        .every(function(letter) {
          return arr[0].toLowerCase()
            .indexOf(letter) !== -1;
        });
    }
    复制代码

    Falsy Bouncer

    function bouncer(arr) {
      
      return arr;
    }
    
    bouncer([7, "ate", "", false, 9]);
    复制代码

    过滤数组假值

    (真假美猴王)

    删除数组中的所有假值。

    在JavaScript中,假值有false、null、0、""、undefined 和 NaN。

    function bouncer(arr) {
      return arr.filter(Boolean);
    }
    
    bouncer([7, "ate", "", false, 9]);
    
    function bouncer(arr) {
        var check = arr.filter(function(i) {
        return Boolean(i);
      });
    
      return check;
    }
    bouncer([7, "ate", "", false, 9]);
    复制代码

    Seek and Destroy

    function destroyer(arr) {
      return arr;
    }
    
    destroyer([1, 2, 3, 1, 2, 3], 2, 3);
    复制代码

    摧毁数组

    金克斯的迫击炮!

    实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值。

    function destroyer(arr) {
     
     console.log(arr);
     //logs [ 1, 2, 3, 1, 2, 3 ]
     console.log(arguments)
     // logs { ‘0’: [ 1, 2, 3, 1, 2, 3 ], ‘1’: 2, ‘2’: 3 }
    }
    destroyer([1, 2, 3, 1, 2, 3], 2, 3);
    复制代码

    console.log(arguments)是一个类数组,我们要转化成数组

    var args = Array.prototype.slice.call(arguments);
    var args = [].slice.call(arguments);
    复制代码

    and,

    var args = Array.from(arguments);
    var args = [...arguments];
    复制代码
    function destroyer(arr) {
       var args = [...arguments]
       args.splice(0,1)        // [2,3]
       return arr.filter((val) => {
           return args.indexOf(val) === -1 // 返回args中不存在的那一项
       })
       return arr;
    }
    
    console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3)); //[ 1, 1 ]
    复制代码

    Where do I belong

    function where(arr, num) {
     return num;
    }
    
    where([40, 60], 50);
    复制代码

    数组排序并找出元素索引

    先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。

    举例:where([1,2,3,4], 1.5) 应该返回 1。因为1.5插入到数组[1,2,3,4]后变成[1,1.5,2,3,4],而1.5对应的索引值就是1。

    同理,where([20,3,5], 19) 应该返回 2。因为数组会先排序为 [3,5,20],19插入到数组[3,5,20]后变成[3,5,19,20],而19对应的索引值就是2。

    function where(arr, num) {
        arr.push(num)
        arr.sort((a,b) => {
            return a-b
        });
        var index = arr.indexOf(num)
        return index;
    }
    
    console.log(where([40, 60], 50)); // 1
    复制代码

    Caesars Cipher

    function rot13(str) { 
      return str;
    }
    
    rot13("SERR PBQR PNZC"); 
    复制代码

    凯撒密码

    (让上帝的归上帝,凯撒的归凯撒)

    下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密码。

    移位密码也就是密码中的字母会按照指定的数量来做移位。

    一个常见的案例就是ROT13密码,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔ 'O',以此类推。

    写一个ROT13函数,实现输入加密字符串,输出解密字符串。

    所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,跳过它们。

    function rot13(str) {
        return str.split('').map((char) => {
            x = char.charCodeAt(0);
            if (x < 65 || x > 90) {
                return String.fromCharCode(x)
            } else if (x < 78) {
                return String.fromCharCode(x + 13)
            } else {
                return String.fromCharCode(x - 13)
            }
        }).join('')
    }
    复制代码

    手机号中间四位加密

    1. this.numEnc = queryNum.substr(0, 3) + queryNum.substr(3, 4).replace(/[\d+]/g, '*') + queryNum.substr(7)
    2.  let queryNum = this.$route.query.num
            this.numEnc = queryNum.split('').map((w, index) => {
              return (index > 2 && index < 7) ? '*' : w
            }).join('')
    3. this.numEnc = queryNum.substr(0, 3) + queryNum.substr(3, 4).replace(/[\d+]/g, '*') + queryNum.substr(7)        
    复制代码

    找到规定数组内缺失的那一项

    用例
    find_missing([1, 14, 11, 51, 15], 10, 15)  //[ 10, 12, 13 ]
    复制代码
    1.
    function find_missing(A,low,high) {
       let newArr = []
       for(let i=low;i<high;i++) {
            newArr.push(i)
       }
       let result = newArr.filter((i) => {
           return A.indexOf(i) === -1
       })
        return result
    }
    2.
    function find_missing(A, low, height) {
        let resArr = []
        let newArr = A.filter(x => x > low && x < height)
        for (let i = low; i < height; i++) {
            if(!newArr.some(x=>x===i)){
                resArr.push(i)
            }
        }
        return resArr
    }
    复制代码

    Sum All Numbers in a Range

    function sumAll(arr) {
      return 1;
    }
    
    sumAll([1, 4]);
    复制代码

    传递给你一个包含两个数字的数组。返回这两个数字和它们之间所有数字的和。

    最小的数字并非总在最前面。

    function sumAll(arr) {
        let max = Math.max.apply(null, arr)
        let min = Math.min.apply(null, arr)
        let result = []
        for(let i= min; i<=max; i++) {
            result.push(i)
        }
        return result.reduce((prev,next) => {
            return prev + next
        },0)
    }
    
    console.log(sumAll([1, 4])); // 10
    复制代码

    用到: Math.max() Math.min() Math max/min Apply method Array.reduce

    Diff Two Arrays

    function diff(arr1, arr2) {
      var newArr = [];
      // Same, same; but different.
      return newArr;
    }
    
    diff([1, 2, 3, 5], [1, 2, 3, 4, 5]);
    复制代码

    比较两个数组,然后返回一个新数组,该数组的元素为两个给定数组中所有独有的数组元素。换言之,返回两个数组的差异。

    function diff(arr1, arr2) {
        let arr1Filtered = arr1.filter((val) => {
            return arr2.indexOf(val) === -1
        })
        let arr2Filtered = arr2.filter((val) => {
            return arr1.indexOf(val) === -1
        })
        return arr1Filtered.concat(arr2Filtered)
    }
    
    diff([1, 2, 3, 5], [1, 2, 3, 4, 5]); // [4]
    复制代码

    Array.indexOf() 当前数组不包含返回 -1 arr.filter()

    function diff(arr1, arr2) {
        return arr1
            .filter(el => !arr2.includes(el))
            .concat(
                arr2.filter(el => !arr1.includes(el))
            )
    }
    diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]);
    复制代码

    Array.filter返回为true的这一项,并把它放入新数组中 Array.includes判断数组是否包含传入参数

    Roman Numeral Converter

    function convert(num) {
     return num;
    }
    
    convert(36);
    复制代码

    将给定的数字转换成罗马数字。

    所有返回的 罗马数字 都应该是大写形式。

    function convert(num) {
        var roman = "", romanNumeral = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'],
        numbers = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
    
        numbers.forEach((item, index) => {
            while (num >= item) {
                roman += romanNumeral[index]
                num-= item
            }
        })
    
        return roman;
    }
    console.log(convert(36)); // XXXVI
    复制代码

    Where art thou

    function where(collection, source) {
      var arr = [];
      // What's in a name?
      return arr;
    }
    
    where([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" });
    
    复制代码

    写一个 function,它遍历一个对象数组(第一个参数)并返回一个包含相匹配的属性-值对(第二个参数)的所有对象的数组。如果返回的数组中包含 source 对象的属性-值对,那么此对象的每一个属性-值对都必须存在于 collection 的对象中。

    例如,如果第一个参数是 [{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }],第二个参数是 { last: "Capulet" },那么你必须从数组(第一个参数)返回其中的第三个对象,因为它包含了作为第二个参数传递的属性-值对。

    function where(collection, source) {
        let sourceKey = Object.keys(source)
        return collection.filter((collectItem) => {
            return sourceKey.every((sourceItem) => {
                return collectItem[sourceItem] === source[sourceItem]
            })
        })
    }
    
    console.log(where([{first: "Romeo", last: "Montague"}, {first: "Mercutio", last: null}, {
        first: "Tybalt",
        last: "Capulet"
    }], {last: "Capulet"})); // [ { first: 'Tybalt', last: 'Capulet' } ]
    复制代码

    Object.keys 返回一个对象中的key值以数组返回

    Array.every() 根据条件遍历数组,如果碰到不成立,立即返回false,循环终止。如更到最后成立,最终返回true

    Array.some() 根据条件遍历数组中每一项,如果碰到成立,立即返回true,循环终止,如果到最后都不成立,最终返回false

    Search and Replace

    function myReplace(str, before, after) {
      return str;
    }
    
    myReplace("A quick brown fox jumped over the lazy dog", "jumped", "leaped");
    复制代码

    使用给定的参数对句子执行一次查找和替换,然后返回新句子。

    第一个参数是将要对其执行查找和替换的句子。

    第二个参数是将被替换掉的单词(替换前的单词)。

    第三个参数用于替换第二个参数(替换后的单词)。

    注意:替换时保持原单词的大小写。例如,如果你想用单词 "dog" 替换单词 "Book" ,你应该替换成 "Dog"。

    function myReplace(str, before, after) {
        if(before[0] === before[0].toUpperCase()) {
            after = after[0].toUpperCase() + after.slice(1)
        }
        return str.replace(before, after)
    }
    console.log(myReplace("A quick brown fox jumped over the lazy dog", "jumped", "leaped"));
    // A quick brown fox leaped over the lazy dog
    复制代码

    String.repalce() 可以替换字符串中的匹配项

    var str = 'A B'
    console.log(str.replace('A', 'B'));
    // returns “B B”
    复制代码

    Pig Latin

    function translate(str) {
      return str;
    }
    
    translate("consonant");
    
    复制代码

    把指定的字符串翻译成 pig latin。

    Pig Latin 把一个英文单词的第一个辅音或辅音丛(consonant cluster)移到词尾,然后加上后缀 "ay"。

    如果单词以元音开始,你只需要在词尾添加 "way" 就可以了

    function translate(str) {
        var pigLatin = '';
        var regex = /[aeiou]/gi;
        if (str[0].match(regex)) {
            pigLatin = str + 'way';
        } else {
            var vowelIndice = str.indexOf(str.match(regex)[0]);
            pigLatin = str.substr(vowelIndice) + str.substr(0, vowelIndice) + 'ay';
        }
    
        return pigLatin;
    }
    translatePigLatin('glove');
    复制代码

    Missing letters

    function fearNotLetter(str) {
      return str;
    }
    
    fearNotLetter("abce");
    复制代码

    从传递进来的字母序列中找到缺失的字母并返回它。

    如果所有字母都在序列中,返回 undefined。

    测试用例

    fearNotLetter("abce") 应该返回 "d"。
    fearNotLetter("abcdefghjklmno") 应该返回 "i"。
    fearNotLetter("bcd") 应该返回 undefined。
    fearNotLetter("yz") 应该返回 undefined。
    复制代码
    function fearNotLetter(str) {
       let startCode = str.charCodeAt(0)
       for(let i= 0; i<str.length;i++) {
           if (str.charCodeAt(i) !== startCode) {
               return String.fromCharCode(startCode)
           } else {
               startCode++
           }
       }
    }
    console.log(fearNotLetter("abce")); //d
    复制代码

    String charCodeAt() 返回指定位置的字符的 Unicode 编码 String fromCharCode() 接受一个或多个 Unicode 值返回对应的字符

    Boo who

    function boo(bool) {
      // What is the new fad diet for ghost developers? The Boolean.
      return bool;
    }
    
    boo(null);
    复制代码

    检查一个值是否是基本布尔类型,并返回 true 或 false。

    基本布尔类型即 true 和 false。

    测试用例

    boo(true) 应该返回 true。
    boo(false) 应该返回 true。
    boo([1, 2, 3]) 应该返回 false。
    boo([].slice) 应该返回 false。
    boo({ "a": 1 }) 应该返回 false。
    boo(1) 应该返回 false。
    boo(NaN) 应该返回 false。
    boo("a") 应该返回 false。
    boo("true") 应该返回 false。
    boo("false") 应该返回 false复制代码
    function boo(bool) {
        return typeof bool === 'boolean';
    }
    复制代码

    Sorted Union

    function unite(arr1, arr2, arr3) {
      return arr1;
    }
    
    unite([1, 3, 2], [5, 2, 1, 4], [2, 1]);
    复制代码

    写一个 function,传入两个或两个以上的数组,返回一个以给定的原始数组排序的不包含重复值的新数组。

    换句话说,所有数组中的所有值都应该以原始顺序被包含在内,但是在最终的数组中不包含重复值。

    非重复的数字应该以它们原始的顺序排序,但最终的数组不应该以数字顺序排序。

    测试用例

    unite([1, 3, 2], [5, 2, 1, 4], [2, 1]) 应该返回 [1, 3, 2, 5, 4]。
    unite([1, 3, 2], [1, [5]], [2, [4]]) 应该返回 [1, 3, 2, [5], [4]]。
    unite([1, 2, 3], [5, 2, 1]) 应该返回 [1, 2, 3, 5]。
    unite([1, 2, 3], [5, 2, 1, 4], [2, 1], [6, 7, 8]) 应该返回 [1, 2, 3, 5, 4, 6, 7, 8]。
    复制代码

    类数组转成数组的方法 Array.prototype.slice.call(arguments) [].slice.call(arguments) Array.from(arguments) var args = [...arguments]

        var args = Array.from(arguments),
        merged = [].concat.apply([],args),
        test =[]
        return merged.filter((val) => {
            if(test.indexOf(val) === -1) {
                test.push(val);
                return true
            } else {
                return false
            }
        })
    复制代码

    Convert HTML Entities

    将字符串中的字符 &、<、>、" (双引号), 以及 ' (单引号)转换为它们对应的 HTML 实体。

    测试用例

    convert("Dolce & Gabbana") 应该返回 Dolce &​amp; Gabbana。
    convert("Hamburgers < Pizza < Tacos") 应该返回 Hamburgers &​lt; Pizza &​lt; Tacos。
    convert("Sixty > twelve") 应该返回 Sixty &​gt; twelve。
    convert('Stuff in "quotation marks"') 应该返回 Stuff in &​quot;quotation marks&​quot;。
    convert("Shindler's List") 应该返回 Shindler&​apos;s List。
    convert("<>") 应该返回 &​lt;&​gt;。
    convert("abc") 应该返回 abc。
    复制代码
    function convert(str) {
       let regObj = {
            "&":"&amp;",
            "<":"&lt;",
            ">":"&gt;",
            '"':"&quot;",
            "'":"&apos;"
        }
      var reg = /[&<>"']/g
      var arr = str.match(reg)
      if(arr) {
        for(let i in arr) {
          str = str.replace(arr[i], regObj[arr[i]])
        }
      }
      return str
    }
    
    convert("Dolce & Gabbana") // Dolce &amp; Gabbana
    复制代码

    Spinal Tap Case

    function spinalCase(str) {
      // "It's such a fine line between stupid, and clever."
      // --David St. Hubbins
      return str;
    }
    
    spinalCase('This Is Spinal Tap');
    复制代码

    将字符串转换为 spinal case。Spinal case 是 all-lowercase-words-joined-by-dashes 这种形式的,也就是以连字符连接所有小写单词。

    测试用例

    spinalCase("This Is Spinal Tap") 应该返回 "this-is-spinal-tap"。
    spinalCase("thisIsSpinalTap") 应该返回 "this-is-spinal-tap"。
    spinalCase("The_Andy_Griffith_Show") 应该返回 "the-andy-griffith-show"。
    spinalCase("Teletubbies say Eh-oh") 应该返回 "teletubbies-say-eh-oh"复制代码
    function spinalCase(str) {
        return str.replace(/\s|_/g,'-').replace(/([a-z])([A-Z])/g,'$1-$2').toLowerCase();
    }
    console.log(spinalCase('thisIsSpinalTap')); // this-is-spinal-tap
    复制代码

    Sum All Odd Fibonacci Numbers

    function sumFibs(num) {
      return num;
    }
    
    sumFibs(4);
    复制代码

    给一个正整数num,返回小于或等于num的斐波纳契奇数之和。

    斐波纳契数列中的前几个数字是 1、1、2、3、5 和 8,随后的每一个数字都是前两个数字之和。

    例如,sumFibs(4)应该返回 5,因为斐波纳契数列中所有小于4的奇数是 1、1、3。

    提示:此题不能用递归来实现斐波纳契数列。因为当num较大时,内存会溢出,推荐用数组来实现。

    测试用例

    sumFibs(1) 应该返回一个数字。
    sumFibs(1000) 应该返回 1785。
    sumFibs(4000000) 应该返回 4613732。
    sumFibs(4) 应该返回 5。
    sumFibs(75024) 应该返回 60696。
    sumFibs(75025) 应该返回 135721。
    复制代码

    取出字符串中出现最多的元素和出现的次数

    let obj = '111222233333444444'
    function maxEle(source) {
        let arr = source.split('')
        let res = {}
        arr.forEach(item => {
            if (!res[item]) {
                res[item] = 1
            } else {
                res[item]++
            }
        });
        let maxNum = 0;
        let maxEle;
        let keys = Object.keys(res)
        keys.forEach(item => {
            if (res[item] > maxNum) {
                maxNum = res[item]
                maxEle = item
            }
        })
        console.log(maxNum, maxEle)
    }
    let result = maxEle(obj)
    // 出现最多的元素e 一共出现6次
    复制代码
    展开全文
  • freeCodeCamp.org's open-source codebase and curriculum freeCodeCamp.org is a friendly community where you can learn to code for free. It is run by a donor-supported 501(c)(3) nonprofit to help ...
  • freeCodeCamp is a friendly open source community where you learn to code and help nonprofits. We help our campers build job-worthy portfolios of real apps used by real people, while helping nonprofits...
  • freeCodeCamp算法

    2018-08-28 11:00:18
    /* Reverse a String 翻转字符串 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串。 你的结果必须得是一个字符串 */ function reverseString(str) { ... re...

    /*
    Reverse a String

    翻转字符串

    先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串。

    你的结果必须得是一个字符串

    */

    function reverseString(str) {
      // 请把你的代码写在这里
      var tempArr = str.split("");
      tempArr.reverse();
    
      return tempArr.join("");
    
    }
    
    reverseString("hello");

    /*
    Factorialize a Number

    计算一个整数的阶乘

    如果用字母n来代表一个整数,阶乘代表着所有小于或等于n的整数的乘积。

    阶乘通常简写成 n!

    例如: 5! = 1 * 2 * 3 * 4 * 5 = 120
    */

    function factorialize(num) {
      // 请把你的代码写在这里
      if (num === 0) { return 1;}
      for (var i = num-1; i > 0; i--) {
            num *= i;
      }
      return num;
    }
    
    factorialize(5);

    /*
    Check for Palindromes

    检查回文字符串

    如果给定的字符串是回文,返回true,反之,返回false。

    如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。

    注意你需要去掉字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是否为回文。

    函数参数的值可以为”racecar”,”RaceCar”和”race CAR”。
    */

    function palindrome(str) {
      // 请把你的代码写在这里
      str = str.replace(/[\s&\|\\\*^%$#@\-,._:()]/gi, ""); // 去掉所有符号和空格,这里已经加了无数次了
      var lowerStr = str.toLowerCase(); //全都转为小写
      var tempArr = lowerStr.split("");
      var tempReverseArr =  tempArr.reverse();
      var reverseStr = tempReverseArr.join("");
      return reverseStr == lowerStr;
    }
    
    
    
    var result = palindrome("A man, a plan, a canal. Panama");

    /*
    Find the Longest Word in a String

    找出最长单词
    在句子中找出最长的单词,并返回它的长度。
    函数的返回值应该是一个数字。
    */

    function findLongestWord(str) {
      // 请把你的代码写在这里
    
      var arr = str.split(" ");
      var tempArr = [];
      for (var i = 0; i < arr.length; i++) {
        tempArr.push(arr[i].length);
      }
      console.log(tempArr);
      var result = tempArr.sort(function(a, b){
        return b-a;
      });
      console.log(result);
      return result[0];
    }
    
    findLongestWord("The quick brown fox jumped over the lazy dog");

    /*
    Title Case a Sentence

    句中单词首字母大写
    确保字符串的每个单词首字母都大写,其余部分小写。
    像’the’和’of’这样的连接符同理。
    */

    function titleCase(str) {
        // 请把你的代码写在这里
        var arr = str.toLowerCase().split(" ");
    
        for (var i = 0; i < arr.length; i++) {
            var char = arr[i].charAt(0);
            arr[i] = arr[i].replace(char, char.toUpperCase());
        }
        return arr.join(" ");
    }
    
    titleCase("I'm a little tea pot");

    /*
    Return Largest Numbers in Arrays

    找出多个数组中的最大数
    右边大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组。
    */

    function largestOfFour(arr) {
      // 请把你的代码写在这里
      var newArr = [];
      for (var i = 0; i < arr.length; i++) {
        var maxNum = arr[i].sort(function(a,b){
            return b-a;
        });
        newArr.push(maxNum[0]);
      }
      return newArr;
    }
    
    largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

    09-03

    /*
    Confirm the Ending
    
    检查字符串结尾
    
    判断一个字符串(str)是否以指定的字符串(target)结尾。
    
    如果是,返回true;如果不是,返回false。
    
    */
    
    function confirmEnding(str, target) {
      // 请把你的代码写在这里
      return str.substr(str.length-target.length) == target;
    }
    
    confirmEnding("He has to give me a new name", "name");
    /*
    Repeat a string repeat a string
    
    重复输出字符串
    
    
    重复一个指定的字符串 num次,如果num是一个负数则返回一个空字符串。
    */
    
    function repeat(str, num) {
      // 请把你的代码写在这里
      if (num<=0) {
        return "";
      }
      var tempStr = "";
      for (var i = 0; i < num; i++) {
        tempStr+=str;
      }
    
      return tempStr;
    }
    
    repeat("abc", 3);
    /**
    Truncate a string
    
    截断字符串
    
    (用瑞兹来截断对面的退路)
    
    如果字符串的长度比指定的参数num长,则把多余的部分用...来表示。
    
    切记,插入到字符串尾部的三个点号也会计入字符串的长度。
    
    但是,如果指定的参数num小于或等于3,则添加的三个点号不会计入字符串的长度。
    
    */
    
    function truncate(str, num) {
      // 请把你的代码写在这里
      if(str.length<=num){
        return str;
      }
      if(num-3 < 0){
        str = str.slice(0, num)+"...";
      }else{
        str = str.slice(0, num-3)+"...";
      }
      return str;
    }
    
    truncate("A-", 1);
    /*
    Chunky Monkey
    
    猴子吃香蕉, 分割数组
    
    (猴子吃香蕉可是掰成好几段来吃哦)
    
    把一个数组arr按照指定的数组大小size分割成若干个数组块。
    
    例如:chunk([1,2,3,4],2)=[[1,2],[3,4]];
    
    chunk([1,2,3,4,5],2)=[[1,2],[3,4],[5]];
    
    */
    
    function chunk(arr, size) {
      // 请把你的代码写在这里
      var newArr = [];
      var perArr = [];
      var len = Math.ceil(arr.length /size);
      var startNum = 0;
      var endNum = size;
      for (var i = 0; i < len; i++) {
        perArr = arr.slice(startNum, endNum);
        startNum += size;
        endNum += size;
        newArr.push(perArr);
      }
      return newArr;
    }
    
    chunk(["a", "b", "c", "d", "e"], 2);
    /**
    Slasher Flick
    
    截断数组
    
    返回一个数组被截断n个元素后还剩余的元素,截断从索引0开始。
    
    */
    
    function slasher(arr, howMany) {
      // 请把你的代码写在这里
      return  arr.slice(howMany);
    }
    
    slasher([1, 2, 3], 2);
    /*
    Mutations
    
    比较字符串
    
    (蛤蟆可以吃队友,也可以吃对手)这个算法我写了一个多小时才改出来,错了十几遍
    
    如果数组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true。
    
    举例,["hello", "Hello"]应该返回true,因为在忽略大小写的情况下,第二个字符串的所有字符都可以在第一个字符串找到。
    
    ["hello", "hey"]应该返回false,因为字符串"hello"并不包含字符"y"。
    
    ["Alien", "line"]应该返回true,因为"line"中所有字符都可以在"Alien"找到。
    */
    
    function mutation(arr) {
      // 请把你的代码写在这里
      var str1 = arr[0];
      var str2 = arr[1];
      str1 = str1.toLowerCase();
      str2 = str2.toLowerCase();
      var tempArr = str2.split("");
      var num = 0;
    
      tempArr = tempArr.filter(function (element, index, array) {
        return array.indexOf(element) === index;
      });
    
    
      for (var i = 0; i < tempArr.length; i++) {
        if (str1.indexOf(tempArr[i]) >= 0) {
            num+=1;
        }
      }
      if (num == tempArr.length) {
        return true;
      }
    
      return false;
    }
    
    mutation(["hello", "heo"]);
    /*
    Falsy Bouncer
    
    过滤数组假值
    
    (真假美猴王)
    
    删除数组中的所有假值。
    
    在JavaScript中,假值有false、null、0、""、undefined 和 NaN。
    
    */
    function bouncer(arr) {
      // 请把你的代码写在这里
      return arr.filter(function(index) {
        if (index != (false && 0 && "") && index != null) {
            return index;
        }
      });
    }
    
    bouncer([7, "ate", "", false, 9]);
    /**
    Seek and Destroy
    
    摧毁数组
    
    金克斯的迫击炮!
    
    实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值。
    */
    
    function destroyer(arr) {
      // 请把你的代码写在这里
      var delArr=[]; // 待摧毁的值的数组
      for(var i=1;arguments[i];i++){
          delArr.push(arguments[i]);
      }
    
      return arr.filter(function(index){
        // 匹配不到位置才会出现-1
        return delArr.indexOf(index)<0;
      });
    
    }
    
    destroyer([1, 2, 3, 1, 2, 3], 2, 3);

    /**
    Where do I belong

    数组排序并找出元素索引

    我身在何处?

    先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。

    举例:where([1,2,3,4], 1.5) 应该返回 1。因为1.5插入到数组[1,2,3,4]后变成[1,1.5,2,3,4],而1.5对应的索引值就是1。

    同理,where([20,3,5], 19) 应该返回 2。因为数组会先排序为 [3,5,20],19插入到数组[3,5,20]后变成[3,5,19,20],而19对应的索引值就是2。
    */

    function where(arr, num) {
      // 请把你的代码写在这里
      arr.push(num);
      arr = arr.sort(function(a, b){
        return a-b;
      });
      return arr.indexOf(num);
    }
    
    where([2, 5, 10], 15);

    /**
    Caesars Cipher
    凯撒密码

    (让上帝的归上帝,凯撒的归凯撒)

    下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密码。

    移位密码也就是密码中的字母会按照指定的数量来做移位。

    一个常见的案例就是ROT13密码,字母会移位13个位置。由’A’ ↔ ‘N’, ‘B’ ↔ ‘O’,以此类推。

    写一个ROT13函数,实现输入加密字符串,输出解密字符串。

    所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,跳过它们。

    3个点很关键
    String.charCodeAt()
    String.fromCharCode()
    还有字母的取值范围

    */

    function rot13(str) { // LBH QVQ VG!
      // 请把你的代码写在这里
     var arr = [];
      for(var i = 0;i < str.length;i++){
        var num = str.charCodeAt(i); // 转换成数字
        // 通过取值范围判断转换 ,常用的标点符号一般小于65,中文的一般数值较大
        if(num < 65 || num > 90){
          arr.push(String.fromCharCode(num)); // 转换成字母
        }else if(num > 77){ // 范围控制在65到90
          arr.push(String.fromCharCode(num - 13));
        }else{
          arr.push(String.fromCharCode(num + 13));
        }
      }
      return arr.join("");
    }
    
    rot13("SERR PBQR PNZC");  // 你可以修改这一行来测试你的代码
    展开全文
  • Our team would like to collaborate with freeCodeCamp.org project. <p>We want to create beginner's course about OpenCV.js. The course will include topics like: installing, resize image and image ...
  • <p>The plan is to announce Chapter publicly at the freeCodeCamp June Summit. <p>In order to release Chapter, the following features will need to be completed. * [ ] Get Google authentication and ...
  • freecodecampfreeCodeCamp is a friendly place to learn to code. We’re committed to keeping it that way. freeCodeCamp是一个学习编码的友好场所...By using freeCodeCamp, you agree that you'll follow this ...

    freecodecamp

    freeCodeCamp is a friendly place to learn to code. We’re committed to keeping it that way.

    freeCodeCamp是一个学习编码的友好场所。 我们致力于保持这种方式。

    By using freeCodeCamp, you agree that you'll follow this code of conduct.

    使用freeCodeCamp,即表示您同意遵守该行为准则。

    In short: Be nice. No harassment, trolling, or spamming.

    简而言之:保持友善。 请勿骚扰,拖钓或发送垃圾邮件。

    • Harassment includes sexual language and imagery, deliberate intimidation, stalking, name-calling, unwelcome attention, libel, and any malicious hacking or social engineering. freeCodeCamp should be a harassment-free experience for everyone, regardless of gender, gender identity and expression, age, sexual orientation, disability, physical appearance, body size, race, national origin, or religion (or lack thereof).

      骚扰包括性语言和图像,蓄意的恐吓,跟踪,称呼,不受欢迎的关注,诽谤以及任何恶意黑客攻击或社会工程。 无论性别,性别认同和表达方式,年龄,性取向,残疾,外表,身材,种族,国籍,宗教信仰(或缺乏宗教信仰),freeCodeCamp都应成为所有人的无骚扰体验。

    • Trolling includes posting inflammatory comments to provoke an emotional response or disrupt discussions.

      拖钓包括发布煽动性评论,以引起情绪React或破坏讨论。

    • Spamming includes posting off-topic messages to disrupt discussions, promoting a product, soliciting donations, advertising a job / internship / gig, or flooding discussions with files or text.

      垃圾邮件包括发布偏离主题的消息以破坏讨论,推广产品,募捐,为工作/实习/演出做广告,或使讨论充满文件或文本。

    If you see someone harass, troll, or spam anywhere in the freeCodeCamp community (forum, chat, YouTube, Facebook, etc.), notify us in the  admin chat room - preferably with a screen shot of the offense. The moderator team will take any action we deem appropriate, up to and including banning the offender from freeCodeCamp.

    如果您在freeCodeCamp社区中的任何地方(论坛,聊天室,YouTube,Facebook等)看到有人骚扰,拖钓或发送垃圾邮件,请在管理聊天室中通知我们-最好附上犯罪记录。 主持人小组将采取我们认为适当的任何行动,包括禁止犯罪者使用freeCodeCamp。

    Also, no bots are allowed in the freeCodeCamp community without prior written permission from Quincy Larson.

    另外,未经Quincy Larson的事先书面许可,freeCodeCamp社区中不允许任何机器人。

    翻译自: https://www.freecodecamp.org/news/code-of-conduct/

    freecodecamp

    展开全文
  • freeCodeCamp 21点算法

    2018-08-20 18:30:10
    var count = 0; function cc(card) { // 请把你的代码写在这条注释以下 if(card == 2 || card ==3 || card ==4 || card ==5 || card ==6){ count++; }else if(card==10 || card =="J"...
  • 这个用了大概三四天时间,做了200多道题,其中有100多个是非常基础的,目前遇到的稍微好点的,一个是21点算法,另一个就是这道题了,这个看着非常简单,然而我却运行了至少几十遍才搞定,所以记下来,给还没搞定的...
  • FreeCodeCamp个人主页

    2017-01-03 17:53:37
    FreeCodeCamp个人主页
  • freecodecamp 学习

    千次阅读 2018-05-06 16:09:55
    1.&lt;h&gt;&lt;/h&gt; 标题 2. &lt;p&gt;&lt;/p&gt;段落3. style 样式 内联用法&...内联样式是为元素添加样式的最简单有效的方式,但是更易于维护的方式是使用层叠样式表css4....在这
  • freecodecamp 答案

    千次阅读 2018-10-22 15:44:45
    192.Golf Code function golfScore(par, strokes) { // 请只修改这条注释以下的代码 if(strokes == 1) { return "Hole-in-one!"; }else if(strokes == par-1) { return "... ...
  • Freecodecamp

    2018-06-20 14:42:20
    在我们深入 面向对象编程之前 ,让我们先回顾一下Javascript的 对象(Object) 任务:给你的 motorBike 对象添加 wheels, engines 和 seats 属性,并且设置他们的数量。var car = { "wheels"...
  • freeCodeCamp Mutations

    2018-09-29 15:07:35
    Mutations 比较字符串 (蛤蟆可以吃队友,也可以吃对手) 如果数组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true。 举例,[“hello”, “Hello”]应该返回true,因为在忽略大小写的情况下,第二...
  • freeCodeCamp 笔记

    2018-03-24 09:54:00
    1. 谷歌字体导入 首先,你需要用link标签来引入谷歌Lobster字体。 <link href=... 再引入样式:font-family: Lobster;...引入样式:border-radius: ...
  • Steamroller FreeCodeCamp

    2019-09-25 19:35:22
    function steamroller(arr) { // I'm a steamroller, baby var resultArr = []; for(var i = 0; i < arr.length; i++) { ... if(Array.isArray(arr[i])){ ... resultArr = resultArr.concat...
  • freecodecampThank you for sharing your expertise and your insights with the developer community. 感谢您与开发者社区分享您的专业知识和见解。 Our publication will help you teach and inspire developers,...
  • freecodecampby Anthony Yannos 安东尼·亚诺斯... 如何充分利用freeCodeCamp (How to get the most out of freeCodeCamp) If you are currently learning how to code, I would highly recommend you look into f...
  • 4 years ago, we launched the freeCodeCamp Forum so everyone would have a supportive place to get programming help. 4年前,我们启动了freeCodeCamp论坛,因此每个人都可以在支持场所获得编程帮助。 At the ...
  • freecodecampThese terms govern use of the website https://www.freecodecamp.org. To use the website, you must agree to these terms with Free Code camp, Inc., the nonprofit company that runs the website...
  • freecodecampToday, the freeCodeCamp community turns 1,000 days old. We’ve accomplished a lot together in that time: 今天,freeCodeCamp社区已经有1000天的历史了。 到那时我们已经共同完成了很多工作: 6,...
  • freecodecamp挑战

    2020-03-21 23:36:19
    2020年3月21初次挑战 完成45关挑战

空空如也

1 2 3 4 5 ... 20
收藏数 2,020
精华内容 808
关键字:

freecodecamp