Newer
Older
xc-business-system / src / utils / Array.ts
import _ from 'lodash'
// 常见数组操作

// 两个数组求交集
export const intersectionArray = (list1: any[], list2: any[]) => {
  return list1.filter(v => list2.includes(v))
}
// 差集 -- 常用于 表格中多选删除
export const differenceArray = (list1: any[], list2: any[]) => {
  return list1.filter(v => !list2.includes(v))
}
// 补集
export const complementaryArray = (list1: any[], list2: any[]) => {
  return list1.filter((v) => { return !(list2.includes(v)) })
    .concat(list2.filter((v) => { return !(list1.includes(v)) }))
}
// 并集
export const unionArray = (list1: any[], list2: any[]) => {
  return list1.concat(list2.filter((v) => { return !(list1.includes(v)) }))
}
// 一维数组去重
export const uniqueArray = (list: any) => {
  return [...new Set(list)]
}
// 二维数组根据 某一属性 去重
export const uniqueMultiArray = (list: any, attribute: string) => {
  const res = new Map()
  return list.filter((a: any) => !res.has(a[attribute]) && res.set(a[attribute], 1))
}
// 一维数组或对象拷贝
export const cloneArray = (data: any) => {
  return JSON.parse(JSON.stringify(data))
}
// 多维数组或对象深拷贝
export const deepClone = (data: any) => {
  return _.cloneDeep(data)
}
// 数组操作-下拉框操作(已经选择的数据不能再选)
/**
 * @param list 下拉框初始数据(所有)
 * @param list1 已经选择的数据
 * @param current 当前数据 可为空
 * @param attribute 属性(即绑定在 list1哪个属性上)
 */
export const setSelectList = (list: any[], list1: any[], current: string, attribute: string, attribute2 = 'value') => {
  const select = [...new Set(list1.map((item: any) => item[attribute]))].filter((item: string) => item !== current)
  return list.filter((item) => { return !select.includes(item[attribute2]) })
}