每天學(xué)習(xí)10個實用JavaScript代碼片段,加深對 JavaScript 語法的理解,積累代碼優(yōu)化經(jīng)驗。

1、FizzBuzz

下面代碼用于實現(xiàn)經(jīng)典的 FizzBuzz 問題,將1100的數(shù)字遍歷,如果是3的倍數(shù)則輸出 Fizz ,如果是5的倍數(shù)則輸出 Buzz,如果既是3的倍數(shù)又是5的倍數(shù)則輸出 FizzBuzz

const fizzBuzz = () => {
    for (let i = 1; i <= 100; )
        console.log((i % 3 ? "" : "Fizz") + (i % 5 ? "" : "Buzz") || i), i++;
};
console.log(fizzBuzz());

2、斐波那契數(shù)列

斐波那契數(shù)列(Fibonacci sequence),又稱黃金分割數(shù)列,因數(shù)學(xué)家萊昂納多·斐波那契(Leonardo Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數(shù)列”,指的是這樣一個數(shù)列:1、1、2、3、5、8、13、21、34、…… 在數(shù)學(xué)上,斐波那契數(shù)列以如下被以遞推的方法定義:F(0)=1,F(xiàn)(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*),在現(xiàn)代物理、準(zhǔn)晶體結(jié)構(gòu)、化學(xué)等領(lǐng)域,斐波那契數(shù)列都有直接的應(yīng)用

斐波那契數(shù)列通常是面試常見的問題,下面代碼是用一個非常簡短的遞歸函數(shù),返回斐波那契數(shù)列中第n個數(shù)字的值。

const fib = (n) => (n <= 2 ? 1 : fib(n - 1) + fib(n - 2));

const createFibNumber = (count = 10) => {
    const arrayFibs = [];
    for (let i = 0; i < count; i++) {
        arrayFibs.push(fib(i));
    }
    return arrayFibs;
};

console.log(createFibNumber(10)); // [ 1, 1,  1,  2,  3, 5, 8, 13, 21, 34 ]

3、快速排序

下面代碼實現(xiàn)了快速排序,通過遞歸將數(shù)組分割成較小和較大的兩個子數(shù)組,最終將它們合并以獲得排序的結(jié)果。

const quickSort = (arrayNums) =>
    arrayNums.length
        ? [
              ...quickSort(arrayNums.slice(1).filter((x) => x <= arrayNums[0])),
              arrayNums[0],
              ...quickSort(arrayNums.slice(1).filter((x) => x > arrayNums[0])),
          ]
        : [];

const arrayNumbers = [1, 3, 5, 6, 2, 4, 11, 30, 100, 40];
console.log(quickSort(arrayNumbers)); // [ 1,  2,  3,  4,   5, 6, 11, 30, 40, 100 ]

4、判斷是否為回文

下面代碼用于判斷一個字符串是否為回文,它將字符串轉(zhuǎn)換為一個字符數(shù)組并翻轉(zhuǎn)它,然后將它們重新連接起來,并將其與原字符串進(jìn)行比較。

const isPalindrome = (str) => str == str.split("").reverse().join("");

console.log(isPalindrome("deved")); // true
console.log(isPalindrome("devedev")); // false

5、數(shù)組去重

下面代碼用于對一個數(shù)組進(jìn)行去重操作,使用ES6中的Set數(shù)據(jù)結(jié)構(gòu),將數(shù)組轉(zhuǎn)換為一個Set,然后再將其轉(zhuǎn)換為一個數(shù)組。

const unique = (arr) => [...new Set(arr)];

const arrayNumbers = [1, 2, 3, 4, 2, 1];
console.log(unique(arrayNumbers)); // [ 1, 2, 3, 4 ]

6、打印九九乘法表

下面代碼可以打印出九九乘法表,它通過兩個嵌套的for循環(huán)遍歷每個數(shù)字,然后打印出相應(yīng)的乘法表達(dá)式及其結(jié)果。

const createNumbers = () => {
    const array = [];
    for (let i = 1; i <= 9; i++)
        for (let j = 1; j <= i; j++)
            array.push(`${j}*${i}=${j * i}${j === i ? "\n" : "  "}`);
    return array.join("");
};
console.log(createNumbers());

輸出結(jié)果如下:

1*1=1
1*2=2  2*2=4
1*3=3  2*3=6  3*3=9
1*4=4  2*4=8  3*4=12  4*4=16
1*5=5  2*5=10  3*5=15  4*5=20  5*5=25
1*6=6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36
1*7=7  2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49
1*8=8  2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64
1*9=9  2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81

7、數(shù)組求和

下面代碼用于對一個數(shù)組中的數(shù)字進(jìn)行求和,使用 reduce 方法將數(shù)組中的所有數(shù)字相加起來,并返回最終的結(jié)果。

const sum = (arr) => arr.reduce((acc, current) => acc + current, 0);
console.log(sum([1, 3, 5, 7, 9, 10])); // 35

8、獲取URL參數(shù)

下面代碼用于從URL中獲取特定的參數(shù)值,使用 URLSearchParams API來獲取URL查詢參數(shù),并使用get方法獲取特定的參數(shù)值。

const getParam = (url, name) =>
    new URLSearchParams(new URL(url).search).get(name);

console.log(getParam("http://www.46649.cn?name=devpoint", "name")); // devpoint

9、判斷一個數(shù)字是否為質(zhì)數(shù)

下面代碼用于判斷一個數(shù)字是否為質(zhì)數(shù),使用一個for循環(huán)遍歷2到數(shù)字的平方根之間的所有數(shù)字,并檢查它們是否可以整除該數(shù)字。

const isPrime = (n) => {
    if (n <= 1) return false;
    for (let i = 2; i <= Math.sqrt(n); i++) {
        if (n % i === 0) return false;
    }
    return true;
};
console.log(isPrime(1)); // false
console.log(isPrime(2)); // true
console.log(isPrime(3)); // true

10、數(shù)組扁平化

下面代碼用于將一個嵌套的數(shù)組扁平化為一個一維數(shù)組,使用 reduce 方法遞歸地遍歷嵌套數(shù)組,并將其合并為一個新的數(shù)組。

const flatten = (arr) =>
    arr.reduce(
        (acc, val) => acc.concat(Array.isArray(val) ? flatten(val) : val),
        []
    );

console.log(flatten([1, [1, 3], [4, 5, 6], [7, [8, [9]]]])); // [ 1, 1, 3, 4, 5, 6, 7, 8, 9 ]

11、階乘

下面代碼用于計算一個數(shù)字的階乘,使用遞歸方法,將數(shù)字乘以它減一的階乘。

const factorial = (n) => (n < 2 ? 1 : n * factorial(n - 1));
console.log(factorial(4)); // 24

總結(jié)

閱讀開源項目是學(xué)習(xí)提升編碼能力最快捷的方式,當(dāng)然現(xiàn)在可能可以借助 ChatGPT 來生成一些函數(shù),其生成的函數(shù)技巧性也很高。