目前這個部落格是用 jekyll 架在 github page 上,但因為 jekyll 功能不多,所以決定把部落格遷移到 Medium 上,以後這邊就不會再發表新文章,歡迎大家到 Medium 上追蹤我~

[Javascript] 幾個實用的 JS 小技巧


最近在網路上看到不少 js 的小技巧
把我覺得比較實用的收錄起來
分享給大家


1. 安全的串接字串

假設你有一些不確定的變數類型
而你想將它們串接成字串
這樣可能會導致錯誤

var one = 1;
var two = 2;
var three = '3';

var result = one + two + three; // 會得到 "33" 而非 "123"

可以用 concat 來串接字串

var one = 1;
var two = 2;
var three = '3';

var result = ''.concat(one, two, three); // 得到 "123"

2. 把字串轉成數字

如果你有一個字串譬如說 ‘1’, ‘123’ 之類的
而你需要把它轉成數字
你可能會這樣做

var one = '1';
var two = '2';

var numberOne = Number(one);    // 1
var numberTwo = parseInt(two);  // 2

但這樣可以更簡單快速

var one = '1';

var numberOne = +one; // 1

3. 移除陣列中的重複元素

如果有一個陣列
裡面有一些元素是重複的
可以用這樣的方式來移除他們

var originArr = [1, 'a', 1, 'a'];

var deduped = originArr.filter(function(el, i, arr){
    return arr.indexOf(el) === i;
});

console.log(deduped); // [1, 'a']

用 ES6 的語法可以寫得更簡潔

var originArr = [1, 'a', 1, 'a'];

var deduped = originArr.filter((el, i, arr) => arr.indexOf(el) === i);

console.log(deduped); // [1, 'a']

4. 把二維陣列扁平化

三種不同的解決方法
將二維陣列合併為單一的陣列

給定一個陣列:

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];

我們想得到這個結果:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

方法一:

var myNewArray = [];
for (var i = 0; i < myArray.length; ++i) {
    for (var j = 0; j < myArray[i].length; ++j){
        myNewArray.push(myArray[i][j]);
    }
}
console.log(myNewArray);
// [1, 2, 3, 4, 5, 6, 7, 8, 9]

方法二:

var myNewArray = myArray.reduce(function(prev, curr) {
  return prev.concat(curr);
});
// [1, 2, 3, 4, 5, 6, 7, 8, 9]

方法三:

var myNewArray = [].concat.apply([], myArray);
// [1, 2, 3, 4, 5, 6, 7, 8, 9]

5. 找到陣列中的最大最小值

內建函式 Math.max() 和 Math.min() 可以從參數中找到最大值和最小值

Math.max(1, 2, 3, 4); // 4
Math.min(1, 2, 3, 4); // 1

如果要在陣列中找最大最小值可以這樣用

var numbers = [1, 2, 3, 4];
Math.max.apply(null, numbers) // 4
Math.min.apply(null, numbers) // 1

透過 ES6 的展開運算子來完成

var numbers = [1, 2, 3, 4];
Math.max(...numbers) // 4
Math.min(...numbers) // 1

6. 用邏輯運算代替條件判斷

在某個條件下做某些事情

if(foo == 10){
    doSomething();
}

// 可以寫成這樣

foo == 10 && doSomething();

有時候在函式內要判斷使用者有沒有輸入參數
沒有的話就設為預設值

if(!foo){  // 如果 foo = undefined 或 null
    foo = 10;
}

// 可以寫成這樣

foo = foo || 10;

7. 判斷是否是很多數值中其中一個

這樣寫很冗長

if(foo==1 || foo==22 || foo==43 || foo==51 || foo==63 || foo==83){
    doSomething();
}

可以改成這樣

if([1, 22, 43, 51, 63, 83].indexOf(foo) != -1){
    doSomething();
}

8. 清空陣列

通常你會這樣清空陣列

var list = [1, 2, 3, 4];

list = [];

但有效能更好的清空陣列方式

var list = [1, 2, 3, 4];

list.length = 0;  // list = []

如果只想刪掉最後兩個元素

var list = [1, 2, 3, 4];

list.length = list.length - 2;  // list = [1, 2]

這些是我比較常用的幾個
如果想看更多可以到網路上找找看
有滿多人分享他們各自的 JS Tips

GitHub:@Larry850806
FaceBook 粉專:賴瑞的程式筆記
如果有新文章或是看到好的文章也會分享在粉專