編寫高質量可維護的代碼之優化邏輯判斷
這篇主要是看不同寫法,不一定真的好
學習自(純紀錄自己學了甚麼,非營利)
嵌套優化
製造一個函數當他是紅色水果時打印出紅色水果,如果他是紅色水果數量又大於10打印數量大於10
1 | function supply(fruit, quantity) { |
由於嵌套層級有三層,維護可能會很困難且不直觀,我們可以想辦法把嵌套變成一級
附註: 個人覺得這個指示在提供想法
1 | function supply(fruit, quantity) { |
多條件分支的優化處理
多種條件判斷
最直覺且最冗的寫法
1
2
3
4
5
6
7
8
9
10
11
12function pick(color) {
// 根据颜色选择水果
if(color === 'red') {
return ['apple', 'strawberry'];
} else if (color === 'yellow') {
return ['banana', 'pineapple'];
} else if (color === 'purple') {
return ['grape', 'plum'];
} else {
return [];
}
}用switch優化
1
2
3
4
5
6
7
8
9
10
11
12function pick(color) {
switch (color) {
case 'red':
return ['apple', 'strawberry'];
case 'yellow':
return ['banana', 'pineapple'];
case 'purple':
return ['grape', 'plum'];
default:
return []
}
}
可讀性
這裡利用 return fruitObj[color] || [] 創造else
透過Object key
1
2
3
4
5
6
7
8function pick(color) {
const fruitObj = {
red: ['apple', 'strawberry'],
yellow: ['banana', 'pineapple'],
purple: ['grape', 'plum']
}
return fruitObj[color] || []
}透過Map
使用Map 數據結構,真正的(key, value) 鍵值對結構;
1
2
3
4
5
6
7function pick(color) {
const fruitColor = new Map()
.set('red', ['apple', 'strawberry'])
.set('yellow', ['banana', 'pineapple'])
.set('purple', ['grape', 'plum'])
return fruitColor.get(color) || []
}甚至可以透過filter
1
2
3
4
5
6
7
8
9
10
11
12const fruits = [
{ name: 'apple', color: 'red' },
{ name: 'strawberry', color: 'red' },
{ name: 'banana', color: 'yellow' },
{ name: 'pineapple', color: 'yellow' },
{ name: 'grape', color: 'purple' },
{ name: 'plum', color: 'purple' }
];
function pick(color) {
return fruits.filter(f => f.color == color);
}
判斷數組所有元素是否都符合某個條件
如果沒看這篇文章我可能會用filter
全部的水果都要是紅色
透過外人監視
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17const fruits = [
{ name: 'apple', color: 'red' },
{ name: 'banana', color: 'yellow' },
{ name: 'grape', color: 'purple' }
];
function match() {
let isAllRed = true; // 外人
// 判断条件:所有的水果都必须是红色
for (let f of fruits) {
if (!isAllRed) break;
isAllRed = (f.color === 'red');
}
console.log(isAllRed); // false
}使用數組新特性every
1
2
3
4
5
6
7
8
9
10
11
12const fruits = [
{ name: 'apple', color: 'red' },
{ name: 'banana', color: 'yellow' },
{ name: 'grape', color: 'purple' }
];
function match() {
// 条件:所有水果都必须是红色
const isAllRed = fruits.every(f => f.color == 'red');
console.log(isAllRed); // false
}
判斷數組是否有某一項滿足條件
只需一種水果紅色
使用some
1 | const fruits = [ |
函數默認參數
不知道有默認參數的設定
1
2
3
4
5
6
7const buyFruit = (fruit,amount) => {
if(!fruit){
return
}
amount = amount || 1;
console.log(amount)
}使用默認
1
2
3
4
5
6const buyFruit = (fruit,amount = 1) => {
if(!fruit){
return
}
console.log(amount,'amount')
}注意!! :
兩種方式不一樣,使用第二種只有undefined才是1
1
2
3
4
5
6
7buyFruit1('apple', ''); // 1
buyFruit1('apple', null); // 1
buyFruit1('apple'); // 1
buyFruit2('apple', ''); // ''
buyFruit2('apple', null); //null
buyFruit2('apple'); // 1