若要判斷 Array 是否以特定 Array 開始,實務上較少遇到,且實現方式也比較少。
Version
macOS Mojave 10.14.5
VS Code 1.35.1
Quokka 1.0.233
Ramda 0.26.1
Functional
import { pipe, take, equals } from 'ramda';
let data = [1, 2, 3];
// startWith :: [a] -> [a] -> Boolean
let startsWith = prefix => pipe(
take(prefix.length),
equals(prefix)
);
startsWith([1, 2])(data); // ?
撇開 ECMAScript 內建 function,若以 functional 角度思考:
使用
take()
先取得prefix
長度的 string使用
equals()
比較take()
所回傳 string 是否與prefix
相等
最後以 pipe()
整合所有流程,非常清楚。
Ramda
import { startsWith } from 'ramda';
let data = [1, 2, 3];
startsWith([1, 2])(data); // ?
事實上 Ramda 已經內建 startsWith()
,可直接使用。
startsWith()
String → String → Boolean
判斷 string 是否以特定 string 開始
String
:要判斷的特定 string
String
:data 為 string
Boolean
:回傳判斷結果
Array
import { startsWith } from 'ramda';
let data = [1, 2, 3];
startsWith([1, 2])(data); // ?
startsWith()
不只能用在 string,也能用在 array。
startsWith()
[a] → [a] → Boolean
判斷 array 是否以特定 array 開始
[a]
:要判斷的特定 array
[a]
:data 為 array
Boolean
:回傳判斷結果
Object
import { startsWith } from 'ramda';
let data = [
{ title: 'FP in JavaScript', price: 300 },
{ title: 'RxJS in Action', price: 400 },
{ title: 'Speaking JavaScript', price: 200 }
];
let prefix = [
{ title: 'FP in JavaScript', price: 300 },
{ title: 'RxJS in Action', price: 400 },
];
startsWith(prefix)(data); // ?
startsWith()
也能用在 object。
Conclusion
startsWith()
大都用在 string,其實也能用在 array- Ramda 的
startsWith()
底層也是使用take()
與equals()
組合而成
Reference
Ramda, startsWith()
Ramda, pipe()
Ramda, take()
Ramda, equals()