檢查數組所有元素是否滿足給定條件

如果提供的函數對數組的所有元素返回 true,則返回 true,否則返回 false


思路

實現思路如下:

使用數組的filter方法對數組執行給定的函數,然後使用count方法獲取執行後的結果,再和count方法獲取未執行filter方法的結果進行比較。











代碼實現

下面我們來看php和js以及ts代碼的實現:











php代碼實現





















使用示例











js代碼實現











ts代碼實現

使用示例










總結

與js/ts實現不同點如下:

  1. php通過count方法來獲取數組的長度,而js/ts則可以直接通過length來獲取數組的長度。
  2. php的filter方法名叫array_filter,而js/ts則是叫filter


檢查數組所有元素是否有一項滿足給定條件

如果提供的函數對數組的至少一個元素返回 true,則返回 true,否則返回 false










實現思路

實現思路和前面的all函數很相似,只不過這裏不需要做比較,只需要判斷長度大於0即可。

代碼實現

下面我們來看php和js以及ts代碼的實現:

php代碼實現

使用示例

js代碼實現

ts代碼實現

使用示例

總結

與all的總結一致。


檢查 2 個數字是否大致相等

檢查兩個數字是否大致相等。

實現思路

實現思路如下:

該函數有3個參數,通過abs方法計算前面2個參數的絕對差值,然後與第三個參數進行比較,判斷是否小於第三個參數,第三個參數默認值是0.001。

代碼實現

下面我們來看php和js以及ts代碼的實現:

php代碼實現

使用示例

js代碼實現

ts代碼實現

使用示例

總結

與js/ts實現不同點如下:

  1. php的獲取絕對值的方法名叫abs,而js/ts則是從Math對象中獲取,即Math.abs


平均值

返回兩個或多個數字的平均值。

實現思路

實現思路如下:

使用sum函數求和,然後除以長度count即可,參數可以使用展開運算符來組成一個數組,注意需要寫一個三元表達式,判斷長度是否為0。

代碼實現

下面我們來看php和js以及ts代碼的實現:

php代碼實現

使用示例

js代碼實現

ts代碼實現

使用示例

總結

與js/ts實現不同點如下:

  1. php可以直接使用array_sum方法求數字數組的和,js/ts需要循環自己計算(或者自己實現一個sum方法)。


數值限定

將數值限制在邊界值 a 和 b 指定的包含範圍內。

實現思路

實現思路如下:

如果該數值在範圍內,則返回該數值,否則,使用最小值方法和最大值方法返回範圍內最接近的數字。

代碼實現

下面我們來看php和js以及ts代碼的實現:

php代碼實現

使用示例

js代碼實現

ts代碼實現

使用示例

總結

與js/ts實現不同點如下:

  1. php的獲取最小值和最大值的方法名叫minmax,而js/ts則是從Math對象中獲取,即Math.minMath.max


組合函數

返回一個將多個函數組合成單個可調用函數的新函數。

實現思路

實現思路如下:

使用 array_reduce() 執行從右到左的函數組合。該函數接收3個參數,第一個參數為函數列表,第二個參數是一個回調函數用來合併數組中的每一個函數,第三個參數是函數的初始值,即$function($x){ return $x; },默認是一個恆等函數,也就是一個返回其輸入參數本身的函數。

代碼實現

下面我們來看php和js以及ts代碼的實現:

php代碼實現

使用示例

js代碼實現

ts代碼實現

使用示例

總結

與js/ts實現不同點如下:

  1. php需要使用use語句來導入閉包中的變量,而js/ts則不需要。
  2. php使用array_reduce方法來遍歷函數數組,並且需要提供一個恆等函數作為第三個參數的初始值,而js/ts直接調用數組的reduce方法來遍歷函數數組,並且不需要提供第三個作為初始值的參數。


統計字符串中元音字母的數量

返回所提供字符串中的元音字母數量。

實現思路

實現思路如下:

使用正則表達式來匹配元音字母,元音字母包含a、e、i、o、u等字母。調用php的preg_match_all方法來匹配,然後使用count方法計算返回值的長度,即為元音字母的數量。

代碼實現

下面我們來看php和js以及ts代碼的實現:

php代碼實現

使用示例

js代碼實現

ts代碼實現

使用示例

總結

與js/ts實現不同點如下:

  1. php使用preg_match_all方法來匹配字符串所有符合條件的字符,而js/ts則使用String.matchAll方法。
  2. php 定義正則表達式和js/ts有所區別,需要把正則表達式當作一個字符串。
  3. js/ts調用matchAll方法時需要提供一個g修飾符,表示用來匹配全局,php則不需要。
  4. js/ts調用matchAll方法返回的是一個迭代器,需要使用展開運算符轉換成數組,然後再計算長度。
  5. php使用count方法來獲取數組的長度,而js/ts可以直接通過length屬性來獲取。


柯里化函數

對函數進行柯里化,以便在多次調用中獲取參數。

實現思路

實現思路如下:

  1. curry接收一個函數參數,返回執行的累積器$acc
  2. 使用&操作符引用累積器,使用use語句導入函數和累積器。
  3. 使用array_merge方法合併所有參數。
  4. 使用php反射ReflectionFunction獲取函數所需參數數量,然後調用getNumberOfRequiredParameters方法獲取必需參數的數量。
  5. 如果必需參數數量小於等於外部參數數量,則直接返回函數執行參數結果,否則遞歸的執行累積器。

代碼實現

下面我們來看php和js以及ts代碼的實現:

php代碼實現

使用示例

js代碼實現

ts代碼實現

使用示例

總結

與js/ts實現不同點如下:

  1. php中使用了反射相關方法來獲取參數,而js/ts則不需要。
  2. php使用array_merge方法來合併參數,而js/ts則不需要。
  3. 兩者的判斷邏輯也有差異。

ps: 兩者的實現都採用了遞歸的方式,這點需要注意。


取消字符串首字母大寫

取消字符串首字母的大寫。

實現思路

實現思路如下:

調用lcfirst方法可以直接將字符串大寫首字母轉換成小寫,根據第二個參數$upperRest來決定是否將其餘字母轉換成大寫,使用strtoupper方法即可。

代碼實現

下面我們來看php和js以及ts代碼的實現:

php代碼實現

使用示例

js代碼實現

ts代碼實現

使用示例

總結

與js/ts實現不同點如下:

  1. php有方法可以直接將首字母轉換成小寫,而js/ts則需要通過slice(或其它字符串的截取方法,例如:substr)方法來截取字符串,然後拼接在一起。
  2. php轉換成大寫的方法是strtoupper,而js/ts則是通過調用String.toUpperCase方法來轉換成大寫。


深度展開數組

深度展平數組,直接將多維數組轉成一維數組。

實現思路

實現思路如下:

使用foreach循環數組,如果數組項是數組(使用is_array方法來判斷),則使用遞歸加array_push和空數組以及展開運算符來合併數組,否則直接使用[]語法來添加數組項(相當於array_push方法)。

代碼實現

下面我們來看php和js以及ts代碼的實現:

php代碼實現

使用示例

js代碼實現

ts代碼實現

使用示例


總結

與js/ts實現不同點如下:

  1. php使用array_push方法來往數組末尾添加元素,而js/ts則是直接使用push方法。
  2. php可以使用[]語法來代替array_push方法,js/ts沒有相關語法。
  3. php使用is_array方法來判斷是否是數組,而js/ts則使用Array.isArray方法。
  4. php使用foreach循環遍歷數組,js/ts沒有foreach循環,但可以使用for循環代替。