Function isEqualWith

  • Compares two values for equality using a custom comparison function.

    The custom function allows for fine-tuned control over the comparison process. If it returns a boolean, that result determines the equality. If it returns undefined, the function falls back to the default equality comparison.

    This function also uses the custom equality function to compare values inside objects, arrays, maps, sets, and other complex structures, ensuring a deep comparison.

    This approach provides flexibility in handling complex comparisons while maintaining efficient default behavior for simpler cases.

    The custom comparison function can take up to six parameters:

    • x: The value from the first object a.
    • y: The value from the second object b.
    • property: The property key used to get x and y.
    • xParent: The parent of the first value x.
    • yParent: The parent of the second value y.
    • stack: An internal stack (Map) to handle circular references.

    Parameters

    • a: any

      The first value to compare.

    • b: any

      The second value to compare.

    • OptionalareValuesEqual: ((a: any, b: any, property?: PropertyKey, aParent?: any, bParent?: any, stack?: Map<any, any>) => boolean | void)

      A function to customize the comparison. If it returns a boolean, that result will be used. If it returns undefined, the default equality comparison will be used.

        • (a, b, property?, aParent?, bParent?, stack?): boolean | void
        • Parameters

          • a: any
          • b: any
          • Optionalproperty: PropertyKey
          • OptionalaParent: any
          • OptionalbParent: any
          • Optionalstack: Map<any, any>

          Returns boolean | void

    Returns boolean

    true if the values are equal according to the customizer, otherwise false.

    const customizer = (a, b) => {
    if (typeof a === 'string' && typeof b === 'string') {
    return a.toLowerCase() === b.toLowerCase();
    }
    };
    isEqualWith('Hello', 'hello', customizer); // true
    isEqualWith({ a: 'Hello' }, { a: 'hello' }, customizer); // true
    isEqualWith([1, 2, 3], [1, 2, 3], customizer); // true