偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

[[407276]]

這幾天在跟著學(xué)一點(diǎn) vue3 + TypeScript 中表單驗(yàn)證的實(shí)例,看到一個(gè)實(shí)現(xiàn),覺(jué)得非常巧妙。

需求概述

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

我們期望在提交表單時(shí),執(zhí)行 funcArr 中的每一個(gè)函數(shù),如果這些函數(shù)都通過(guò)驗(yàn)證,則我們的主邏輯獲取到 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 

這種做法顯然有點(diǎn)瞎扯了,完全沒(méi)有用到 JavaScript 特性和函數(shù)式編程的思想。

Array.prototype.every()

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

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

于是:

  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 

可以注意到一個(gè)現(xiàn)象:當(dāng)every發(fā)現(xiàn)有一個(gè)元素沒(méi)有通過(guò)驗(yàn)證時(shí),它就不再繼續(xù)檢查其他元素了。

結(jié)合 map()

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

因此,我們希望 every 能夠執(zhí)行完畢所有函數(shù),即便發(fā)現(xiàn)其中某一個(gè)是 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在其中的作用,像是一個(gè)漏斗,把所有的值依次過(guò)濾,有一個(gè) false 就返回 false ,否則是 true 。

 

責(zé)任編輯:姜華 來(lái)源: 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擴(kuò)展

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對(duì)象

2021-05-08 10:36:31

開(kāi)發(fā)Java Map

2021-03-26 00:00:05

?JavaMap設(shè)計(jì)

2022-02-09 16:02:26

Go 語(yǔ)言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
點(diǎn)贊
收藏

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