每天學習10個實用JavaScript代碼片段,加深對 JavaScript 語法的理解,積累代碼優化經驗。
1、FizzBuzz
下面代碼用于實現經典的 FizzBuzz 問題,將1到100的數字遍歷,如果是3的倍數則輸出 Fizz ,如果是5的倍數則輸出 Buzz,如果既是3的倍數又是5的倍數則輸出 FizzBuzz。
const fizzBuzz = () => {
for (let i = 1; i <= 100; )
console.log((i % 3 ? "" : "Fizz") + (i % 5 ? "" : "Buzz") || i), i++;
};
console.log(fizzBuzz());
2、斐波那契數列
斐波那契數列(Fibonacci sequence),又稱黃金分割數列,因數學家萊昂納多·斐波那契(Leonardo Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、…… 在數學上,斐波那契數列以如下被以遞推的方法定義:F(0)=1,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*),在現代物理、準晶體結構、化學等領域,斐波那契數列都有直接的應用
斐波那契數列通常是面試常見的問題,下面代碼是用一個非常簡短的遞歸函數,返回斐波那契數列中第n個數字的值。
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、快速排序
下面代碼實現了快速排序,通過遞歸將數組分割成較小和較大的兩個子數組,最終將它們合并以獲得排序的結果。
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、判斷是否為回文
下面代碼用于判斷一個字符串是否為回文,它將字符串轉換為一個字符數組并翻轉它,然后將它們重新連接起來,并將其與原字符串進行比較。
const isPalindrome = (str) => str == str.split("").reverse().join("");
console.log(isPalindrome("deved")); // true
console.log(isPalindrome("devedev")); // false
5、數組去重
下面代碼用于對一個數組進行去重操作,使用ES6中的Set數據結構,將數組轉換為一個Set,然后再將其轉換為一個數組。
const unique = (arr) => [...new Set(arr)];
const arrayNumbers = [1, 2, 3, 4, 2, 1];
console.log(unique(arrayNumbers)); // [ 1, 2, 3, 4 ]
6、打印九九乘法表
下面代碼可以打印出九九乘法表,它通過兩個嵌套的for循環遍歷每個數字,然后打印出相應的乘法表達式及其結果。
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());
輸出結果如下:
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、數組求和
下面代碼用于對一個數組中的數字進行求和,使用 reduce 方法將數組中的所有數字相加起來,并返回最終的結果。
const sum = (arr) => arr.reduce((acc, current) => acc + current, 0);
console.log(sum([1, 3, 5, 7, 9, 10])); // 35
8、獲取URL參數
下面代碼用于從URL中獲取特定的參數值,使用 URLSearchParams API來獲取URL查詢參數,并使用get方法獲取特定的參數值。
const getParam = (url, name) =>
new URLSearchParams(new URL(url).search).get(name);
console.log(getParam("http://www.zlot.com.cn?name=devpoint", "name")); // devpoint
9、判斷一個數字是否為質數
下面代碼用于判斷一個數字是否為質數,使用一個for循環遍歷2到數字的平方根之間的所有數字,并檢查它們是否可以整除該數字。
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、數組扁平化
下面代碼用于將一個嵌套的數組扁平化為一個一維數組,使用 reduce 方法遞歸地遍歷嵌套數組,并將其合并為一個新的數組。
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、階乘
下面代碼用于計算一個數字的階乘,使用遞歸方法,將數字乘以它減一的階乘。
const factorial = (n) => (n < 2 ? 1 : n * factorial(n - 1));
console.log(factorial(4)); // 24
總結
閱讀開源項目是學習提升編碼能力最快捷的方式,當然現在可能可以借助 ChatGPT 來生成一些函數,其生成的函數技巧性也很高。