0.2.2 • Published 3 months ago

@quanxiaoxiao/compare v0.2.2

Weekly downloads
-
License
ISC
Repository
-
Last release
3 months ago

Use expressions similar to MongoDB query statements to detect whether the data type of an object matches the expression.

Install

npm install @quanxiaoxiao/compare

Quick Start

import compare from '@quanxiaoxiao/compare';

compare({ name: 'quan' })({ name: 'quan', age: 22 }) === true
compare({ age: { $gt: 20 } })({ name: 'quan', age: 22 }) === true
compare({ good: false })({ name: 'quan', age: 22, good: false }) === true
compare({ big: null })({ name: 'quan', age: 22, good: false }) === true
compare({ 'obj.name': 'quan' })({ obj: { name: 'quan' } }) === true

Expression Type

  • Object
  • Array

Expression Operators

Number Comparison Expression Operators

NameType
$eqstring, null, boolean, number
$nestring, null, boolean, number
$gtnumber
$gtenumber
$ltnumber
$ltenumber

$eq

compare({ name: { $eq: 'quan' } })({ name: 'quan' }) === true
compare({ age: { $eq: null } })({ name: 'quan' }) === true
compare({ 'obj.name': { $eq: 'quan' } })({ obj: { name: 'quan' } }) === true

$ne

compare({ name: { $ne: 'quan' } })({ name: 'rice' }) === true
compare({ age: { $ne: null } })({ name: 'quan', age: 33 }) === true

$gt

compare({ age: { $gt: 22 } })({ age: 23 }) === true

$gte

compare({ age: { $gte: 22 } })({ age: 22 }) === true
compare({ age: { $gte: 22 } })({ age: 23 }) === true

$lt

compare({ age: { $lt: 22 } })({ age: 21 }) === true

$lte

compare({ age: { $lte: 22 } })({ age: 21 }) === true
compare({ age: { $lte: 22 } })({ age: 22 }) === true

Array Expression Operators

NameType
$inArray<string, null, boolean, number>
$ninArray<string, null, boolean, number>

$in

compare({ age: { $in: [22, 23, 28] } })({ age: 22 }) === true
compare({ name: { $in: ['', null] } })({ age: 22 }) === true
compare({ name: { $in: ['', null] } })({ age: 22, name: '' }) === true

$nin

compare({ age: { $nin: [22, 23, 28] } })({ age: 24 }) === true
compare({ name: { $nin: ['', null] } })({ age: 22, name: 'aaa' }) === true

Eegexp Expression Operators

NameType
$regexstring, Array<string>

$regex

compare({ name: { $regex: '^a(1|3|z)c' } })({ name: 'a3c' }) === true
compare({ name: { $regex: '^a(1|3|z)c' } })({ name: 'azc' }) === true
compare({ name: { $regex: ['^a(1|3|z)c', 'i'] } })({ name: 'Azc' }) === true

Boolean Expression Operators

NameType
$notArray<Number comparison Expression, Eegexp Expression, Array Expression>
$andArray<Number comparison Expression, Eegexp Expression, Array Expression>
$orArray<Number comparison Expression, Eegexp Expression, Array Expression>
$norArray<Number comparison Expression, Eegexp Expression, Array Expression>

$not

express = {
  $not: [
     { $eq: 33 },
     { $eq: 44 },
  ]
}; // age !== 33 && age !== 44

compare(express)({ age: 34 }) === true
express = {
  $not: [
     { $lt: 33 },
     { $gt: 44 },
  ]
};  // !(age < 33) && !(age > 44)

compare(express)({ age: 34 }) === true

$and

express = {
  $and: [
     { $gt: 33 },
     { $lt: 44 },
  ]
};  // age > 33 && age < 44

compare(express)({ age: 34 }) === true

$or

express = {
  $or: [
     { $lt: 33 },
     { $gt: 44 },
  ]
}; // age < 33 || age > 44

compare(express)({ age: 32 }) === true
compare(express)({ age: 45 }) === true 

Other

const express = [
  { name: 'quan' },
  { age: { $gt: 22 } },
]; // name === 'quan' || age > 22

compare(express)({ age: 32 }) === true
compare(express)({ name: 'quan' }) === true
const express = {
  method: 'GET',
  'headers.host': {
    $or: [
      {
        $regex: '\\baaa\\.com\\b',
      },
      {
        $regex: '\\bccc\\.net\\b',
      },
    ],
  },
};

compare(express)({ method: 'GET', headers: { host: 'www.aaa.com' } }) === true
compare({ 'obj1.age': ['obj2.age', '$gt'] })({
  obj1: { age: 22 },
  obj2: { age: 33 },
}) === true  // obj2.age > obj1.age
0.2.2

3 months ago

0.2.1

3 months ago

0.2.0

3 months ago

0.1.0

5 months ago

0.0.6

12 months ago

0.0.3

1 year ago

0.0.5

1 year ago

0.0.4

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago