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

    • 序言 👏
    • has【对象含有属性(功能更强大)】
    • hasOwn【对象含有属性(扩展)】
    • deepClone【深度克隆】
    • setPropPath【给每个对象设置路径节点名】
    • findPropPath【从对象中找到键名路径名】
    • get【获取对象属性值】🔥🔥🔥
    • flatten 【将对象进行扁平化】
    • readonly【定义只读属性】
    • def【定义不可枚举属性】
    • cache【内存缓存对象】
    • bus【发布订阅】🔥🔥🔥
    • merge 【合并对象】
    • deepMerge 【递归深合并对象】
    • transformObjectKeys【对象属性字段全部转成大写或者小写】
    • convertPropToLower【对象属性字段全部转成大写或者小写】
    • looseEqual【比较对象内部结构和数据】🔥🔥🔥
      • 1.示例
      • 2.入参说明
      • 3.源码
    • omit【忽略对象属性】
    • pick【取出对象属性】
  • 数组-Array✨✨✨

  • 方法-Function

  • 字符串-String

  • 数学-Math

  • 文件-Buffer

  • 节点-dom

  • 拓展

  • nodejs

目录

looseEqual【比较对象内部结构和数据】🔥🔥🔥

描述

判断两个值是否相等,包含对象,数组,以及原始值的判断, 只比较内部结构和数据 v3.0.4+

# 1.示例

import { looseEqual } from 'sf-utils2'

const a = { name: 'v2324' }
const b = { name: 'v2324' }
looseEqual(a, b) // true

const c = { name: 'v2324', id: 1 }
looseEqual(a, c) // false

const d = { name: 'v2324', ids: [1, 2, 4] }
looseEqual(a, d) // false

const e = { name: 'v2324', ids: [1, 2, 4] }
looseEqual(e, d) // true
1
2
3
4
5
6
7
8
9
10
11
12
13
14

:::

# 2.入参说明

参数 说明 类型 是否必填 默认值
a 对象一 Object 是
b 对象二 Object 是

# 3.源码

import isObject from '@/base/isObject'

/**
 * 判断两个值是否相等,包含对象,数组,以及原始值的判断, 只比较内部结构和数据
 * @param {any} a
 * @param {any} b
 * @return {false|this is string[]|boolean|*}
 */
function looseEqual(a, b) {
  if (a === b) return true
  const isObjectA = isObject(a)
  const isObjectB = isObject(b)
  if (isObjectA && isObjectB) {
    try {
      const isArrayA = Array.isArray(a)
      const isArrayB = Array.isArray(b)
      if (isArrayA && isArrayB) {
        return (
          a.length === b.length &&
          a.every((e, i) => {
            return looseEqual(e, b[i])
          })
        )
      } else if (a instanceof Date && b instanceof Date) {
        return a.getTime() === b.getTime()
      } else if (!isArrayA && !isArrayB) {
        const keysA = Object.keys(a)
        const keysB = Object.keys(b)
        return (
          keysA.length === keysB.length &&
          keysA.every(key => {
            return looseEqual(a[key], b[key])
          })
        )
      } else {
        /* istanbul ignore next */
        return false
      }
    } catch (e) {
      /* istanbul ignore next */
      return false
    }
  } else if (!isObjectA && !isObjectB) {
    return String(a) === String(b)
  } else {
    return false
  }
}

export default looseEqual
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
上次更新: 2024/01/08, 21:47:25
convertPropToLower【对象属性字段全部转成大写或者小写】
omit【忽略对象属性】

← convertPropToLower【对象属性字段全部转成大写或者小写】 omit【忽略对象属性】→

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