国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > 幫助中心 > 正文

詳解如何在JS代碼中消滅for循環(huán)

2024-07-09 22:42:33
字體:
供稿:網(wǎng)友

Edit: 在我入職第三家公司的第一天,看到代碼庫里面一堆的 for 循環(huán),內(nèi)心有些崩潰,于是做了一次技術(shù)分享,展示怎樣在代碼中避免 for 循環(huán)。這篇文章是那次分享的總結(jié)。本文并不完美,其中遞歸的部分其實(shí)不應(yīng)該在目前的生產(chǎn)環(huán)境中使用。但是我依然堅(jiān)持認(rèn)為 JS 引擎應(yīng)該支持尾調(diào)優(yōu)化,寫尾遞歸和寫循環(huán)性能沒差別。

一,用好 filter,map,和其它 ES6 新增的高階遍歷函數(shù)

問題一:

將數(shù)組中的 falsy 值去除

const arrContainsEmptyVal = [3, 4, 5, 2, 3, undefined, null, 0, ""];

答案:

const compact = arr => arr.filter(Boolean);

問題二:

將數(shù)組中的 VIP 用戶余額加 10

const users = [ { username: "Kelly", isVIP: true, balance: 20 }, { username: "Tom", isVIP: false, balance: 19 }, { username: "Stephanie", isVIP: true, balance: 30 }];

答案:

users.map( user => (user.isVIP ? { ...user, balance: user.balance + 10 } : user));

補(bǔ)充:經(jīng)網(wǎng)友提醒,這個(gè)答案存在淺拷貝的問題。操作引用型數(shù)據(jù)確實(shí)是一個(gè)麻煩的問題。下面提供兩個(gè)方案:

用 Ramda:

import R from "ramda";const add10IfVIP = R.ifElse(  R.propEq("isVIP", true),  R.evolve({ balance: R.add(10) }),  R.identity);const updateUsers = R.map(add10IfVIP);updateUsers(users);

用 Immer

如果你習(xí)慣寫 mutable 的代碼,可以試下 Immer,用 mutable 的風(fēng)格寫 immutable 的代碼。

import produce from "immer";const updatedUsers = produce(users, nextState => {  nextState.forEach(user => {  if (user.isVIP) {    user.balance += 10;    }  });});

問題三:

判斷字符串中是否含有元音字母

const randomStr = "hdjrwqpi";

答案:

const isVowel = char => ["a", "e", "o", "i", "u"].includes(char);const containsVowel = str => [...str].some(isVowel);containsVowel(randomStr);

問題四:

判斷用戶是否全部是成年人

const users = [ { name: "Jim", age: 23 }, { name: "Lily", age: 17 }, { name: "Will", age: 25 }];

答案:

users.every(user => user.age >= 18);

問題五:

找出上面用戶中的第一個(gè)未成年人

答案:

const findTeen = users => users.find(user => user.age < 18);findTeen(users);

問題六:

將數(shù)組中重復(fù)項(xiàng)清除

const dupArr = [1, 2, 3, 3, 3, 3, 6, 7];

答案:

const uniq = arr => [...new Set(arr)];uniq(dupArr);

問題七:

生成由隨機(jī)整數(shù)組成的數(shù)組,數(shù)組長度和元素大小可自定義

答案:

const genNumArr = (length, limit) => Array.from({ length }, _ => Math.floor(Math.random() * limit));genNumArr(10, 100);
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 肥东县| 阿拉善左旗| 绥芬河市| 肇东市| 天等县| 澜沧| 博罗县| 平和县| 达日县| 娄烦县| 盱眙县| 庆云县| 鹤山市| 寿宁县| 嘉禾县| 高碑店市| 平原县| 包头市| 桓仁| 平舆县| 兴隆县| 澄江县| 龙口市| 阳朔县| 清水县| 呼玛县| 洛宁县| 博乐市| 扶风县| 静安区| 灵丘县| 四平市| 襄城县| 津市市| 福安市| 曲阳县| 祁阳县| 汉寿县| 蓝田县| 涞水县| 阿城市|