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

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

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

[[407276]]

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

需求概述

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

我們期望在提交表單時,執(zhí)行 funcArr 中的每一個函數(shù),如果這些函數(shù)都通過驗(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)瞎扯了,完全沒有用到 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)象:當(dāng)every發(fā)現(xiàn)有一個元素沒有通過驗(yàn)證時,它就不再繼續(xù)檢查其他元素了。

結(jié)合 map()

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

因此,我們希望 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 。

 

責(zé)任編輯:姜華 來源: Piper蛋窩
相關(guān)推薦

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擴(kuò)展

2021-12-14 07:40:07

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

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對象

2020-12-09 18:36:28

ObjectArrayJavaSc

2022-02-09 16:02:26

Go 語言ArraySlice

2021-05-08 10:36:31

開發(fā)Java Map

2021-03-26 00:00:05

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

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ù)組

2021-11-11 14:50:01

JavaScriptarry編程開發(fā)
點(diǎn)贊
收藏

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