Skip to content

mosmos21/object-comparator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Object Comparator

This package provides functions for comparing objects.

Installation

# use npm
$ npm install --save object-comparator
# use yarn
$ yarn add object-comparator

Usage

import { compareObject } from 'object-comparator'

const obj1 = { name: 'foo', value: 1 }
const obj2 = { name: 'bar', value: 2 }
const obj3 = { name: 'bar', value: 2 }
 
const result1 = compareObject(obj1, obj2)
console.log(result1.equal) // false

const result2 = compareObject(obj2, obj3)
console.log(result2.equal) // true

API

Commonly, the comparison functions have a Result type return value defined as follows.

type Equal = { 
  equal: true
}

type NotEqual = {
  equal: false
}

type Result = Equal | NotEqual

typeOf: (obj: any) => ObjectType

Classify the value of the argument into one of the following

  • ObjectType.Array
  • ObjectType.Bigint
  • ObjectType.Boolean
  • ObjectType.Class
  • ObjectType.Function
  • ObjectType.Number
  • ObjectType.ull
  • ObjectType.Object
  • ObjectType.String
  • ObjectType.Symbol
  • ObjectType.Undefined

compareFunction: (fun1: Function, fun2: Function, option?: CompareOption) => Result

Compare the values of ObjectType.Function. If an optional comparison operator is given(option.functionTypeComparator), use it to compare, otherwise use fun.name to compare.

compareClass: (cls1: Object, cls2: Object, option?: CompareOption) => Result

Comparing values that are ObjectType. If an optional comparison operator is given(option.classTypeComparator), use it to compare, otherwise use fun.constructor.name to compare.

compareArray: (arr1: any[], arr2: any[], option?: CompareOption) => Result

Compare values in an ObjectType.Array. The array is sorted and compared. Each element of the array is further compared according to the result of the typeOf function.

compareObject: (obj1: any, obj2: any, option?: CompareOption) => Result

Takes an argument of any type, and if it is ObjectType.Object, it checks if the key/value pair is an exact match.

CompareOption

type CompareOption = Partial<{
  
  // If the option is not passed, 
  // the comparison is performed as implemented by the compareClass function.
  classTypeComparator: (cls1: Object, cls2: Object) => Result;

  // If the option is not passed, 
  // the comparison is performed as implemented by the compareFunction function.
  functionTypeComparator: (fun1: Function, fun2: Function, option?: CompareOption) => Result;
}>