sf-utils2 sf-utils2
版本v3.3.3-beta1
首页
  • 01.快速开始 🔥
  • 02.基础-Base
  • 03.对象-Object
  • 04.数组-Array
  • 05.方法-Function
  • 06.字符串-String
  • 07.数学-Math
  • 08.dom
  • 09.拓展
  • webpack5.x教程学习 (opens new window)
  • 例子
  • 教程 🔥
  • 例子配置
企业级后台模版 (opens new window)
版本v3.3.3-beta1
首页
  • 01.快速开始 🔥
  • 02.基础-Base
  • 03.对象-Object
  • 04.数组-Array
  • 05.方法-Function
  • 06.字符串-String
  • 07.数学-Math
  • 08.dom
  • 09.拓展
  • webpack5.x教程学习 (opens new window)
  • 例子
  • 教程 🔥
  • 例子配置
企业级后台模版 (opens new window)
  • 快速开始

  • 基础-Base

  • 对象-Object

  • 数组-Array✨✨✨

    • 序言 👏
    • uniq 【数组去重】
    • arrayToMap 【数组转成Map】
    • arrayToObj 【数组转成obj】
    • chunk 【数组切割】
    • compact 【去除数组中无效值】
    • remove 【数组中移除一个元素】
    • shuffle 【数组随机打乱】
    • groupBy 【分组】
    • compactIsNoNullable 【去除数组中null/undefined/NaN】
    • arrayDiff【比较数组差异】🔥🔥
    • differenceBy【获取新增数组】🔥
      • 1.示例
      • 2.入参说明
      • 3.源码
    • intersection 【数组交集】
    • matchSubListGroup
    • listToTree【列表转树形】🔥🔥🔥
    • treeToList【树型转列表】🔥🔥🔥
    • eachTree【遍历树形结构】🔥🔥🔥
    • filterTree【过滤树形结构】🔥🔥🔥
    • childNodesInList【列表中获取某个下所有后代节点】🔥
    • parentNodesInTree【tree中获取所有祖先节点】 🔥
    • formatStrategyIdsInTree【树形数据中只选中父节点】 🔥
    • range 【序号列表生成函数】
  • 方法-Function

  • 字符串-String

  • 数学-Math

  • 文件-Buffer

  • 节点-dom

  • 拓展

  • nodejs

目录

differenceBy【获取新增数组】🔥

描述

比较两数组之间值的不同,存在数组1中,不存在数组2中 v3.1.4+

# 1.示例

import { intersection } from 'sf-utils2'
console.log(differenceBy([3.1, 2.2, 1.3], [3.1, 4.4, 2.5, 1.3], (a, b) => a === b))
// => [3.1, 1.3]

console.log(differenceBy([{ x: 2 }, { x: 1 }], [{ x: 1 }], 'x'))
// => [{ 'x': 2 }]
1
2
3
4
5
6

# 2.入参说明

参数 说明 类型 是否必填 默认值
newArray 新数组 Array 是
oldArray 老数组 Array 是
condition 条件 string[]、string 否

# 3.源码

源码,点开查看 👈
import isString from '@/base/isString'
import isFunction from '@/base/isFunction'
import arrayToMap from '@/array/arrayToMap'
import uniq from '@/array/uniq'

/**
 * 比较两数组之间值的不同,存在数组1中,不存在数组2中
 * 本质上是求出哪些是删除的
 * @param {Array} array1 数组1
 * @param {Array} array2 数组2
 * @param {string|function(a:any, b?:any):boolean|number} [condition] 条件
 * @returns {*[]}
 */
function differenceBy(array1, array2, condition) {
  const result = []
  if (!condition) {
    // 无条件
    let array1Map = arrayToMap(array1)
    let array2Map = arrayToMap(array2)
    array1Map.forEach((v, k) => {
      if (!array2Map.has(k)) {
        result.push(v)
      }
    })
  } else if (isString(condition)) {
    // 是有条件 且是字符串
    const arrayToMapOpts = { valueType: 'array' }
    let array1Map = arrayToMap(array1, condition, arrayToMapOpts)
    let array2Map = arrayToMap(array2, condition, arrayToMapOpts)
    array1Map.forEach((v, k) => {
      if (!array2Map.has(k)) {
        result.push(...v)
      }
    })
  } else if (isFunction(condition)) {
    // 是有条件 且是方法
    array1.forEach(a =>
      array2.forEach(b => {
        if (!!condition(a, b)) {
          result.push(a)
          return true
        }
        return false
      })
    )
  }
  return uniq(result)
}

export default differenceBy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
上次更新: 2024/01/16, 00:14:12
arrayDiff【比较数组差异】🔥🔥
intersection 【数组交集】

← arrayDiff【比较数组差异】🔥🔥 intersection 【数组交集】→

Theme by Vdoing | Copyright © 2022-2025 bianpengfei
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×