成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

巧技拾遺 | JavaScript 中 Array.every 和 Array.map 的巧妙結合

開發 前端
我們有一個列表 funcArr ,里面存放函數,比如 funcArr = [ func1, func2, ... ] 。這些函數都是 () => boolean 即無參數、返回值為布爾值的。

[[407276]]

這幾天在跟著學一點 vue3 + TypeScript 中表單驗證的實例,看到一個實現,覺得非常巧妙。

需求概述

我們有一個列表 funcArr ,里面存放函數,比如 funcArr = [ func1, func2, ... ] 。這些函數都是 () => boolean 即無參數、返回值為布爾值的。

我們期望在提交表單時,執行 funcArr 中的每一個函數,如果這些函數都通過驗證,則我們的主邏輯獲取到 true ,否則是 false 。

樸素版本

  1. func1 = () => { console.log(1); return true; } 
  2. func2 = () => { console.log(2); return false; } 
  3. func3 = () => { console.log(3); return true; } 
  4.  
  5. funcArr = [func1, func2, func3]; 
  6.  
  7. result = true
  8. for (var i = 0; i < funcArr.length; i ++ ) 
  9.   if (!funcArr[i]( "i")) result = false
  10.  
  11. console.log(result) 

輸出是:

  1. > 1 
  2. > 2 
  3. > 3 
  4. false 

這種做法顯然有點瞎扯了,完全沒有用到 JavaScript 特性和函數式編程的思想。

Array.prototype.every()

一般來講,有上述需求,我們用 Array.prototype.every()[1] 函數來解決。

根據 MDN 的描述:every用于檢測是否每個函數都通過,并且最終返回 一個 布爾值。

于是:

  1. func1 = () => { console.log(1); return true; } 
  2. func2 = () => { console.log(2); return false; } 
  3. func3 = () => { console.log(3); return true; } 
  4.  
  5. funcArr = [func1, func2, func3]; 
  6.  
  7. result = funcArr.every(func => func()); 
  8.  
  9. console.log(result) 

輸出:

  1. > 1 
  2. > 2 
  3. false 

可以注意到一個現象:當every發現有一個元素沒有通過驗證時,它就不再繼續檢查其他元素了。

結合 map()

有時候,我們的 funcArr 中的函數,不僅僅是單純的返回一個布爾值,其中還有其他邏輯如修改一些響應式變量的作用。

因此,我們希望 every 能夠執行完畢所有函數,即便發現其中某一個是 return false 了的。

考慮使用 map 。

  1. func1 = () => { console.log(1); return true; } 
  2. func2 = () => { console.log(2); return false; } 
  3. func3 = () => { console.log(3); return true; } 
  4.  
  5. funcArr = [func1, func2, func3]; 
  6.  
  7. result = funcArr.map(func => func()).every(res => res); 
  8.  
  9. console.log(result) 

輸出:

  1. > 1 
  2. > 2 
  3. > 3 
  4. false 

every在其中的作用,像是一個漏斗,把所有的值依次過濾,有一個 false 就返回 false ,否則是 true 。

 

責任編輯:姜華 來源: Piper蛋窩
相關推薦

2024-09-23 12:35:49

2022-10-12 23:39:46

Java接口屬性

2018-11-30 15:17:38

CPUCache緩存行

2022-10-11 09:33:04

Java異常Exception

2010-03-30 08:36:26

Java框架StrutsSpring

2020-12-22 14:11:45

JS forEach()map()

2009-09-21 16:59:29

Array擴展

2021-12-14 07:40:07

C# 異步流結合體

2012-06-15 09:56:40

2021-03-19 16:05:33

CSS CSS 屬性CSS 基礎

2016-09-12 17:19:51

JavaScriptArray操作技巧

2010-10-09 09:18:14

JavaScriptArray對象

2021-05-08 10:36:31

開發Java Map

2021-03-26 00:00:05

?JavaMap設計

2020-12-09 18:36:28

ObjectArrayJavaSc

2022-02-09 16:02:26

Go 語言ArraySlice

2022-10-10 09:00:35

ReactJSX組件

2022-01-25 08:36:29

array.flat映射函數數組

2024-08-30 08:35:03

JavaScript切片數組

2010-07-27 14:44:23

Flex Array
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产免费播放视频 | 国产一区二区 | 久久亚洲一区二区三 | 91影院在线观看 | 国产美女在线免费观看 | 免费观看成人鲁鲁鲁鲁鲁视频 | 国产在线精品一区二区三区 | 久草网免费 | 亚洲美女av网站 | 国产精品免费高清 | 精品视频在线一区 | 美女久久久久久久 | 成人av一区二区三区 | 欧美成人a∨高清免费观看 欧美日韩中 | 中文字幕在线三区 | 国产黄色小视频在线观看 | 欧美三级三级三级爽爽爽 | 91成人免费看片 | 国产黄色精品 | 日韩精品在线观看网站 | 欧美一区二区在线播放 | 伊人伊成久久人综合网站 | 午夜视频一区二区 | 成人国产免费视频 | 91免费福利在线 | 欧美区日韩区 | 日韩成人影院在线观看 | 欧美日韩成人在线 | 欧美国产一区二区 | 日韩精品久久久久 | 操操日| 青青草一区| 午夜视频在线播放 | 成人午夜 | 国产美女自拍视频 | 中文字幕一区二区三区不卡 | 日韩国产中文字幕 | 成人在线播放网站 | 精品国产精品国产偷麻豆 | www.国产精| 日韩影院一区 |