Skip to content

xor

数组取补集。

基本用法

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

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

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

对象数组

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

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

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

自定义函数

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

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

xor(
  [
    { 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: 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>