From c0d0cd7551da0b8c46a6499edb0e214a7f0ac744 Mon Sep 17 00:00:00 2001 From: renzp94 <1074720760@qq.com> Date: Tue, 11 Jun 2024 15:51:01 +0800 Subject: [PATCH] =?UTF-8?q?feat(object):=20=E5=B0=86removeKey=E6=9B=B4?= =?UTF-8?q?=E5=90=8D=E4=B8=BAomit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/pages/object/omit.md | 31 +++++++++++++++++++ docs/pages/object/removeKey.md | 30 ------------------ src/array/flatten.ts | 4 +-- src/object/index.ts | 2 +- src/object/omit.ts | 21 +++++++++++++ src/object/removeKey.ts | 27 ---------------- .../{removeKey.test.ts => omit.test.ts} | 6 ++-- 7 files changed, 58 insertions(+), 63 deletions(-) create mode 100644 docs/pages/object/omit.md delete mode 100644 docs/pages/object/removeKey.md create mode 100644 src/object/omit.ts delete mode 100644 src/object/removeKey.ts rename test/object/{removeKey.test.ts => omit.test.ts} (64%) diff --git a/docs/pages/object/omit.md b/docs/pages/object/omit.md new file mode 100644 index 0000000..9e3745a --- /dev/null +++ b/docs/pages/object/omit.md @@ -0,0 +1,31 @@ +# omit + +删除对象指定属性。 + +> 注意:此方法不会改变源对象。 + +## 基本用法 + +传入一个对象和属性名数组,返回删除属性后的对象。 + +```ts +import { omit } from '@renzp/utils' + +const a = { a: 1, b: 2 }; +const c = omit(a, "a"); // c = { b: 2 } a = { a: 1, b: 2 } +``` + +## 参数 + + +| 参数 | 说明 | 类型 | 默认值 | 是否必填 | +| ------ | ---------- | ------------------ | ------ | -------- | +| target | 源对象 | `T` | - | 是 | +| keys | 属性名数组 | `Array` | - | 是 | + + +## 返回 + +| 参数 | 说明 | 类型 | +| ------ | ------------------ | ------------ | +| target | 删除指定属性的对象 | `Omit` | diff --git a/docs/pages/object/removeKey.md b/docs/pages/object/removeKey.md deleted file mode 100644 index 78563a0..0000000 --- a/docs/pages/object/removeKey.md +++ /dev/null @@ -1,30 +0,0 @@ -# removeKey - -删除对象指定属性。 - -> 注意:此方法不会改变源对象。 - -## 基本用法 - -传入一个对象和属性名,返回删除属性后的对象。 - -```ts -import { removeKey } from '@renzp/utils' - -const a = { a: 1, b: 2 }; -const c = removeKey(a, "a"); // c = { b: 2 } a = { a: 1, b: 2 } -``` - -## 参数 - -| 参数 | 说明 | 类型 | 默认值 | 是否必填 | -| ---- | ------------ | ----------- | ------ | -------- | -| obj | 要处理的对象 | `T` | - | 是 | -| key | 要删除的属性 | `K keyof T` | - | 是 | - - -## 返回 - -| 参数 | 说明 | 类型 | -| ---- | ---------------- | ------------ | -| obj | 删除属性后的对象 | `Omit` | diff --git a/src/array/flatten.ts b/src/array/flatten.ts index 178e3fa..547242d 100644 --- a/src/array/flatten.ts +++ b/src/array/flatten.ts @@ -1,5 +1,5 @@ import { isArray, isUnDef } from '../is' -import { removeKey } from '../object' +import { omit } from '../object' export interface FlattenOptions { // 如果是对象数组,指定深度扁平化的属性 @@ -61,7 +61,7 @@ export const flatten: Flatten = (list, options) => { (prev: Parameters[0], curr: Parameters[0][0]) => { let values = isArray(curr) ? curr : [curr] if (isCanDeep) { - const target: Parameters[0][0] = removeKey(curr, deepKey) + const target: Parameters[0][0] = omit(curr, [deepKey]) values = [target, ...(curr[deepKey] ? _flatten(curr[deepKey]) : [])] } diff --git a/src/object/index.ts b/src/object/index.ts index bc31437..d389d06 100644 --- a/src/object/index.ts +++ b/src/object/index.ts @@ -1,3 +1,3 @@ export * from './merge' +export * from './omit' export * from './pick' -export * from './removeKey' diff --git a/src/object/omit.ts b/src/object/omit.ts new file mode 100644 index 0000000..51ebb6e --- /dev/null +++ b/src/object/omit.ts @@ -0,0 +1,21 @@ +import { _po } from '../_base' +import type { ExpandRecursively } from '../types' + +/** + * 删除对象指定属性 + * + * 此方法不会改变源对象 + * @param target 源对象 + * @param keys 属性数组 + * @returns 如果源对象是对象则返回删除属性后的对象,否则原样返回 + * + * @example + * const a = { a: 1, b: 2 }; + * const c = omit(a, "a"); // c = { b: 2 } a = { a: 1, b: 2 } + */ +export const omit = , K extends keyof T>( + target: T, + keys: Array, +): ExpandRecursively> => { + return _po(target, keys, 'omit') as unknown as ExpandRecursively> +} diff --git a/src/object/removeKey.ts b/src/object/removeKey.ts deleted file mode 100644 index e95dd7b..0000000 --- a/src/object/removeKey.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { isObject } from '../is' - -/** - * 删除对象指定属性 - * - * 此方法不会改变源对象 - * @param obj 源对象 - * @param key 属性 - * @returns 如果源对象是对象则返回删除属性后的对象,否则返回undefined - * - * @example - * const a = { a: 1, b: 2 }; - * const c = removeKey(a, "a"); // c = { b: 2 } a = { a: 1, b: 2 } - */ -export const removeKey = ( - obj: T, - key: K, -): Omit => { - if (!isObject(obj)) { - return obj - } - - const target = { ...obj } - delete target[key] - - return target as Omit -} diff --git a/test/object/removeKey.test.ts b/test/object/omit.test.ts similarity index 64% rename from test/object/removeKey.test.ts rename to test/object/omit.test.ts index 0b1746a..f417ae9 100644 --- a/test/object/removeKey.test.ts +++ b/test/object/omit.test.ts @@ -1,13 +1,13 @@ import { expect, test } from 'bun:test' -import { removeKey } from '../../src' +import { omit } from '../../src' test('移除对象属性', () => { const a = { a: 1, b: 2 } - const b = removeKey(a, 'a') + const b = omit(a, ['a']) expect(a).toEqual({ a: 1, b: 2 }) expect(b).toEqual({ b: 2 }) }) test('传入的不是对象', () => { - expect(removeKey([], 'a' as any)).toEqual([]) + expect(omit([], 'a' as any)).toEqual([]) })