Skip to content

union

数组取并集。

基本用法

传入多个数组,使用SameValueZero进行比较,返回含有并集数据的数组。

ts
import { union } from '@renzp/utils';

union([1, 1, 2, 3], [4, 3]); // [1, 2, 3, 4]
union([1, false, 2], [false, 4, 1])); // [1, false, 2, 4]
union([1, '1', 2, 3], [4, 3, '1'])); // [1, '1', 2, 3, 4]

对象数组

当数组元素为对象时,默认是直接对比对象的,如果想根据对象的属性来判断的话,可在最后一个参数传入配置项options.filter

ts
import { union } from '@renzp/utils';

union(
  [
    { a: 1, b: 1 },
    { a: 2, b: 1 },
    { a: 3, b: 1 },
  ],
  [
    { a: 1, b: 1 },
    { a: 2, b: 2 },
    { a: 3, b: 3 },
    { a: 3, b: 2 },
    { a: 4, b: 2 },
  ],
  { filter: 'a' },
); // [{ a: 1, b: 1 }, { a: 2, b: 1 }, { a: 3, b: 1 }, { a: 4, b: 2 }]

自定义函数

如果当指定对象key进行对比无法满足需求时,可以传给options.filter一个函数,函数返回一个boolean

ts
import { union } from '@renzp/utils';

union(
  [
    { a: 1, b: 1 },
    { a: 2, b: 1 },
    { a: 3, b: 1 },
    { a: 1, b: 1 },
    { a: 2, b: 1 },
    { a: 3, b: 2 },
  ],
  [
    { a: 1, b: 1 },
    { a: 2, b: 1 },
    { a: 3, b: 1 },
    { a: 1, b: 2 },
    { a: 2, b: 3 },
  ],
  { filter: (target, v) => target.a === v.a && target.b === v.b },
); // [{ a: 1, b: 1 }, { a: 2, b: 1 }, { a: 3, b: 1 }, { a: 3, b: 2 }, { a: 1, b: 2 }, { a: 2, b: 3 }]

参数

参数说明类型默认值是否必填
...args目标数组[...Array<T>]-
options配置FilterOptions<T>-

options

参数说明类型默认值是否必填
filter过滤key或函数Filter<T>-
ts
export type Filter<T> =
  | keyof T
  | Array<keyof T>
  | ((target: T, v: T) => boolean)

返回

参数说明类型
list含有并集数据的数组Array<T>