Skip to content

treeShaking

数据树摇。即:从数据中移除一部分数据。

注意:此方法仅支持对象,数组,Set,Map。

基本用法

传入一个数据,返回一个数组:[删除后的数据,删除的数据]

ts
import { treeShaking } from '@renzp/utils'

treeShaking([1, '2', 3, 4, 5], { indexes: [0, 2] }); // [['2', 4, 5], [1, 3]]
treeShaking([1, '2', 3, 4, 5], { start: 2, end: 4 }); // [[1, '2'], [3, 4, 5]]
treeShaking({ a: 1, b: 2, c: 3 }, { keys: ['a'] }; // [{ b: 2, c: 3 }, { a: 1 }]

数组和Set

数组和Set类型的数据,可以通过设置options.indexes使用下标树摇,或者设置options.startoptions.end使用范围树摇。

对象和Map

对象和Map类型的数据,可通过设置options.keys使用属性树摇。

自定义树摇

如果都不满足的话,可以通过filter自定义树摇规则,filter返回true则表示要树摇掉的数据。

参数

参数说明类型默认值是否必填
v要树摇的数据T-
options配置TreeShakingOptions<T>-
ts
export type TreeShakingArrayOptions = {
  indexes: Array<number>
  start?: number
  end?: number
}

export type TreeShakingArrayMutexOptions = Mutex<
  Pick<TreeShakingArrayOptions, 'indexes'>,
  Omit<TreeShakingArrayOptions, 'indexes'>
>

export type TreeShakingOptions<T> = Mutex<
  T extends Array<any>
    ? TreeShakingArrayMutexOptions
    : T extends Set<any>
      ? TreeShakingArrayMutexOptions
      : T extends Map<infer K, any>
        ? {
            keys: Array<K>
          }
        : {
            keys: Array<keyof T>
          },
  { filter?: (v: any) => boolean }
>

options

公共options

参数说明类型默认值是否必填
filter自定义规则(v: any) => boolean-

数组/Set独有options

参数说明类型默认值是否必填
indexes下标数组, 与start/end互斥Array<number>-
start开始位置(包含), 与indexes互斥number-
end结束位置(包含), 与indexes互斥number-

对象/Map独有options

参数说明类型默认值是否必填
keys属性数组Array<keyof T>-

返回

参数说明类型
[v,removeV][删除后的数据,删除的数据]TreeShakingReturn<T>
ts
export type TreeShakingReturn<T> = T extends Array<any>
  ? [Array<ArrayElementType<T>>, Array<ArrayElementType<T>>]
  : [Partial<T>, Partial<T>]