【lodash的omit函數詳解 - 從入門到精通】

lodash的omit函數詳解 - 從入門到精通

小白視角:什么是omit?

omit在英文中意為"忽略"或"省略"。在編程中,它就是從一個對象中刪除不需要的屬性,返回一個新對象。

// 原始對象
const person = {name: "張三", age: 30, password: "123456"};// 使用omit刪除password
const safeInfo = omit(person, ['password']);
// 結果: {name: "張三", age: 30}

初級前端:基本應用場景

1. 表單數據提交

就像當前代碼中的用法,提交前去除不需要傳給后端的字段:

const params = {...omit(formData.value, ['password2',  // 確認密碼字段不需要提交'checkAgreement',  // 只用于前端驗證// 其他不需要的字段]),password,  // 加密后的密碼secretToken  // 額外添加的字段
};

2. 隱藏敏感信息

const userInfo = omit(userData, ['password', 'idNumber']);

中級前端:更深入的理解

1. 自己實現一個omit

function myOmit(obj, keysToRemove) {// 方法1: 使用解構和過濾return Object.fromEntries(Object.entries(obj).filter(([key]) => !keysToRemove.includes(key)));// 方法2: 使用reduce// return Object.keys(obj).reduce((result, key) => {//   if (!keysToRemove.includes(key)) {//     result[key] = obj[key];//   }//   return result;// }, {});
}

2. 性能考量

針對項目中的注冊表單,分析不同方法的優劣:

// 方式1:使用omit (當前代碼使用)
const params = {...omit(formData.value, ['password2', 'checkAgreement', /* 其他字段 */]),password,secretToken
};// 方式2:手動解構
const { password2, checkAgreement, smsCode, ...rest } = formData.value;
const params = {...rest,password,secretToken
};// 方式3:手動構造
const params = {operatorName: formData.value.operatorName,operatorId: formData.value.operatorId,// ... 列出所有需要的字段password,secretToken
};

方式1代碼最清晰,方式2在字段少時效率最高,方式3最繁瑣但最明確。

高級前端:深入源碼與最佳實踐

1. lodash-es的omit源碼精髓

lodash的omit實際上是先通過baseClone創建一個淺拷貝,然后利用內部的basePick函數實現。它處理了大量邊界情況,比如屬性描述符、Symbol鍵、原型鏈等。

2. 樹搖優化考量

使用lodash-es而非lodash的好處是支持樹搖,只會打包你使用的函數:

// 推薦: 只引入需要的函數
import { omit } from 'lodash-es';// 不推薦: 引入全部
import _ from 'lodash';

3. 高性能場景中的取舍

當處理大型對象或頻繁操作時,考慮這些替代方案:

// 1. 使用Object.create保留原型鏈
function fastOmit(obj, keys) {const result = Object.create(Object.getPrototypeOf(obj));for (const key in obj) {if (!keys.includes(key) && Object.prototype.hasOwnProperty.call(obj, key)) {result[key] = obj[key];}}return result;
}// 2. 使用Map/Set優化查找
function optimizedOmit(obj, keys) {const keysSet = new Set(keys);return Object.fromEntries(Object.entries(obj).filter(([key]) => !keysSet.has(key)));
}

4. TypeScript類型安全版本

function omit<T extends object, K extends keyof T>(obj: T, keys: K[]
): Omit<T, K> {const result = { ...obj };keys.forEach(key => delete result[key]);return result;
}

通過對表單處理這個場景深入思考,omit不僅是一個工具函數,更體現了函數式編程中數據不可變性的思想,以及前端開發中數據轉換和適配的核心理念。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/77140.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77140.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/77140.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

軟考筆記9——數據庫技術基礎

第九章節——數據庫技術基礎 數據庫技術基礎 第九章節——數據庫技術基礎一、基本概念1. 數據庫與數據庫系統2. 數據庫的三級模式2.1 內模式2.2 概念模式2.3 外模式2.4 數據庫的兩級映射2.5 數據庫設計的基本步驟 二、數據模型1. 基本概念2. E-R模型2.1 實體2.2 聯系2.3 屬性 3…

Django分頁教程及示例

推薦超級課程: 本地離線DeepSeek AI方案部署實戰教程【完全版】Docker快速入門到精通Kubernetes入門到大師通關課AWS云服務快速入門實戰目錄 完整代碼示例:結論Django的分頁模塊允許你將大量數據分割成更小的塊(頁面)。這對于以可管理的方式顯示項目列表,如博客文章或產品…

int 與 Integer 的區別詳解

1. 本質區別 特性intInteger類型基本數據類型&#xff08;Primitive&#xff09;包裝類&#xff08;Wrapper Class&#xff09;存儲位置棧&#xff08;或作為對象成員在堆中&#xff09;堆&#xff08;對象實例&#xff09;默認值0null&#xff08;可能導致 NullPointerExcept…

mariadb使用docker compose方式安裝

問題 本地mac m1上面的mysql和mariadb突然不用使用了&#xff0c;重新安裝也不想&#xff0c;最近mac系統也更新了&#xff0c;brew也更新了&#xff0c;重新安裝mariadb還是不能正常使用&#xff0c;現在我打算使用docker來安裝本地的mariadb了。 默認配置文件my.cnf 從容器…

基于React + Antd + Java的OFD文件上傳預覽實現方案(OFD文件轉圖片)

一、前端實現方案(React + Antd) import React, {useState } from react; import {Upload, Button, Image, Carousel } from antd; import {UploadOutlined } from @ant-design/icons;const OFDUploadPreview = () => {const [previewImages, setPreviewImages] = useSta…

從零構建大語言模型全棧開發指南:第四部分:工程實踐與部署-4.3.1LangChain與Dify平臺實戰:從RAG到Agent工作流

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 LangChain與Dify平臺實戰:從RAG到Agent工作流 - 4.3.1 LangChain與Dify平臺實戰:從RAG到Agent工作流1. LangChain核心組件與RAG架構設計1.1 LangChain核心模塊1.2 RAG架構實現流程2. RAG實戰:企業知識…

操作 Office Excel 文檔類庫Excelize

Excelize 是 Go 語言編寫的一個用來操作 Office Excel 文檔類庫&#xff0c;基于 ECMA-376 OOXML 技術標準。可以使用它來讀取、寫入 XLSX 文件&#xff0c;相比較其他的開源類庫&#xff0c;Excelize 支持操作帶有數據透視表、切片器、圖表與圖片的 Excel 并支持向 Excel 中插…

R Excel 文件:高效數據處理與可視化工具的完美結合

R Excel 文件&#xff1a;高效數據處理與可視化工具的完美結合 引言 在數據分析和處理領域&#xff0c;R語言因其強大的數據處理能力和豐富的可視化功能而備受青睞。而Excel作為最常用的電子表格軟件&#xff0c;其廣泛的應用也使得R與Excel的結合成為數據處理與可視化的理想…

[ctfshow web入門] 零基礎版題解 目錄(持續更新中)

ctfshow web入門 零基礎版 前言 我在刷題之前沒有學過php&#xff0c;但是會python和C&#xff0c;也就是說&#xff0c;如果你和我一樣會一門高級語言&#xff0c;就可以開始刷題了。我會以完全沒學過php的視角來寫題解&#xff0c;你也完全沒有必要專門學習php&#xff0c;這…

linux第三次作業

1、將你的虛擬機的網卡模式設置為nat模式&#xff0c;給虛擬機網卡配置三個主機位分別為100、200、168的ip地址 2、測試你的虛擬機是否能夠ping通網關和dns&#xff0c;如果不能請修改網關和dns的地址 3、將如下內容寫入/etc/hosts文件中&#xff08;如果有多個ip地址則寫多行&…

如何開發 HTML 游戲

開發 HTML 游戲適合初學者學習編程和游戲開發的基礎知識。HTML 游戲通常結合了 HTML、CSS 和 JavaScript 技術&#xff0c;利用瀏覽器的渲染能力來實現交互式的游戲體驗。 1. 確定游戲類型 在開始開發之前&#xff0c;你需要明確你的游戲類型。例如&#xff1a; 簡單游戲&…

我的NISP二級之路-02

目錄 一.數據庫 二.TCP/IP協議 分層結構 三.STRIDE模型 四.檢查評估與自評估 檢查評估 自評估 五.信息安全應急響應過程 六.系統工程 七.SSE-CMM 八.CC標準 九.九項重點工作 記背: 一.數據庫 關于數據庫恢復技術&#xff0c;下列說法不正確的是&#xff1a…

結構化需求分析:專業方法論與實踐

結構化需求分析是一種用于軟件開發或其他項目中的系統分析方法&#xff0c;旨在全面、準確地理解和描述用戶對系統的需求。以下是關于結構化需求分析的詳細介紹&#xff1a; 一、概念 結構化需求分析是采用自頂向下、逐步分解的方式&#xff0c;將復雜的系統需求分解為若干個…

windows10安裝配置并使用Miniconda3

windows10安裝配置并使用Miniconda3 Conda 與 Anaconda 的區別 Conda 是包管理和環境管理工具&#xff0c;Anaconda 在 Conda 的 基礎上預裝了大量科學計算包 Conda 與 pip 的區別 Conda 是跨語言的包和環境管理器&#xff08;支持 Python/R 等&#xff09;&#xff0c;能安…

PyTorch中的Flatten

在 PyTorch 中&#xff0c;Flatten 操作是將多維張量轉換為一維向量的重要操作&#xff0c;常用于卷積神經網絡(CNN)的全連接層之前。以下是 PyTorch 中實現 Flatten 的各種方法及其應用場景。 一、基本 Flatten 方法 1. 使用 torch.flatten() 函數 import torch# 創建一個4…

Spring Boot + MyBatis + Maven論壇內容管理系統源碼

項目描述 xxxForum是一個基于Spring Boot MyBatis Maven開發的一個論壇內容管理系統&#xff0c;主要實現了的功能有&#xff1a; 前臺頁面展示數據、廣告展示內容模塊&#xff1a;發帖、評論、帖子分類、分頁、回帖統計、訪問統計、表單驗證用戶模塊&#xff1a;權限、資料…

探索AI編程規范化的利器:Awesome Cursor Rules

在AI輔助編程逐漸成為開發者標配的今天,如何讓AI生成的代碼既符合項目規范又保持高質量,成為開發者面臨的新挑戰。GitHub倉庫**awesome-cursorrules**正是為解決這一問題而生的開源項目,它通過系統化的規則模板庫,重新定義了AI編程的規范邊界。本文將深入解析這一工具的核心…

AnimateCC基礎教學:json數據結構的測試

一.核心代碼: const user1String {"name": "張三", "age": 30, "gender": "男"}; const user1Obj JSON.parse(user1String); console.log("測試1:", user1Obj.name, user1Obj.age, user1Obj.gender);/*const u…

阿里云域名證書自動更新acme.sh

因為阿里云的免費證書只有三個月的有效期&#xff0c;每次更換都比較繁瑣&#xff0c;所以找到了 acme.sh&#xff0c;還有一種 certbot 我沒有去了解&#xff0c;就直接使用了 acme.sh 來更新證書&#xff0c;acme.sh 的主要特點就是&#xff1a; 支持多種 DNS 服務商自動化續…

PDF 中提取數學公式

? 方法一&#xff1a;使用 doc2x extract_formula_imgs Pix2Text 一鍵運行腳本&#xff08;自動提取識別&#xff09; &#x1f449; 適合你如果用 Python 的話&#xff0c;只需要運行一段腳本即可&#xff1a; ? &#x1f501; 一步搞定腳本&#xff08;僅需安裝一次&…