之前有人給我這様的一道題,設 A, B 為 string,編寫一個程序使得,當 B 的字母都在 A 出現過時,傳出 true,否則 false。例如 A = "abcde", B = "abc", 因為 B 中的 a, b, c 都在 A 出現過,因此我們的 funtion 要傳出 true。
因為沒有 .every 或 .reduce 等等的概念,第一次做的時候寫了兩個 for loop。然後答案使用 .every,嗯,知道多一個 method 也是好的。
最近在學習 .reduce,只要是需要對整個 array 的 entry 作 "consecutive action" (一個一個順序作一些 action),都可以用 reduce 來解決。例如剛剛講到的 function 除了用 .every 外,還可以這様寫:
const containment = (string1, string2) => {
const string1Array = string1.toLowerCase().split("");
const string2Array = string2.toLowerCase().split("");
return string2Array.reduce((A, char) => {
return A && string1Array.indexOf(char) > -1;
}, true);
};
好像有點太複雜 w? 我們來看看更簡單的例子,我們編寫 function maximum 來取得一個 number array 最大的數值:
const maximum = (...numbers) => {
return numbers.reduce((A, b) => {
return A > b ? A : b;
});
};
這様一來 maximum(2, 3, 11, -2) 會 return 11。還是看不懂?我們現在就來講講 reduce 的概念﹗為了講得更仔細,無可避免要用數學一點的精確語言來解析。