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

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

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

[[407276]]

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

需求概述

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

我們期望在提交表單時,執(zhí)行 funcArr 中的每一個函數(shù),如果這些函數(shù)都通過驗證,則我們的主邏輯獲取到 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 特性和函數(shù)式編程的思想。

Array.prototype.every()

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

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

于是:

  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 

可以注意到一個現(xiàn)象:當every發(fā)現(xiàn)有一個元素沒有通過驗證時,它就不再繼續(xù)檢查其他元素了。

結(jié)合 map()

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

因此,我們希望 every 能夠執(zhí)行完畢所有函數(shù),即便發(fā)現(xiàn)其中某一個是 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蛋窩
相關(guān)推薦

2024-09-23 12:35:49

2022-10-12 23:39:46

Java接口屬性

2022-10-11 09:33:04

Java異常Exception

2018-11-30 15:17:38

CPUCache緩存行

2010-03-30 08:36:26

Java框架StrutsSpring

2020-12-22 14:11:45

JS forEach()map()

2021-12-14 07:40:07

C# 異步流結(jié)合體

2009-09-21 16:59:29

Array擴展

2012-06-15 09:56:40

2021-03-19 16:05:33

CSS CSS 屬性CSS 基礎(chǔ)

2016-09-12 17:19:51

JavaScriptArray操作技巧

2010-10-09 09:18:14

JavaScriptArray對象

2021-05-08 10:36:31

開發(fā)Java Map

2021-03-26 00:00:05

?JavaMap設(shè)計

2022-02-09 16:02:26

Go 語言ArraySlice

2020-12-09 18:36:28

ObjectArrayJavaSc

2022-10-10 09:00:35

ReactJSX組件

2022-01-25 08:36:29

array.flat映射函數(shù)數(shù)組

2024-08-30 08:35:03

JavaScript切片數(shù)組

2010-07-27 14:44:23

Flex Array
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 99福利网| 中文字幕视频在线观看 | 久久精品免费观看 | cao在线 | 91久久精品一区二区三区 | 日韩精品免费播放 | 99精品一区二区 | 国产精品一区二区三区久久 | 国产日产久久高清欧美一区 | 在线视频 亚洲 | 国产在线精品一区二区 | 国产日韩久久 | 日本高清aⅴ毛片免费 | 91精品国产色综合久久 | 激情六月天 | 色一阁| 久久久久久久一区 | 91精品国产综合久久小仙女图片 | 亚洲视频中文 | 久草久草久草 | 日韩一级 | 做a网站 | 午夜视频在线观看视频 | 狠狠爱一区二区三区 | 国产成人精品免费视频大全最热 | aaaa日韩 | 亚洲成av人片在线观看 | 成人免费淫片aa视频免费 | 欧美视频一区二区三区 | 日本午夜在线视频 | 欧美激情第一区 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 中文字幕一区在线观看视频 | 久久影院一区 | 国产精品18久久久久久白浆动漫 | 日韩伦理一区二区 | 九色av| 亚洲 欧美 精品 | 56pao在线 | 亚洲精品自拍视频 | 久久国产精品99久久久久久丝袜 |