ECN>> z>> 返回
项目作者: z-pattern-matching

项目描述 :
Pattern Matching for Javascript
高级语言: JavaScript
项目地址: git://github.com/z-pattern-matching/z.git
创建时间: 2015-09-01T14:37:18Z
项目社区:https://github.com/z-pattern-matching/z

开源协议:Apache License 2.0

下载


Pattern matching for JavaScript" class="reference-link">z Pattern matching for JavaScript

Build Status
Coverage Status
NPM version

Usage

  • Install via npm: npm install z
  • Require z in your code and use the matches function: const { matches } = require('z')

Avaiable Patterns

  • Matches by value: (x = 1) =>, (x = null) =>, (x = 'true') =>
  • Matches by object or array: (x = {a: 1}) =>, (x = [1, 2]) =>
  • Matches by type: (x = String) =>, (x = Boolean) =>
  • Matches by instance: (x = Date) =>, (x = Person) =>
  • Matches by splitting array into elements and tail (head, tail) => , (a, b, c, tail) =>, etc…

Examples

  • Example: Matches by Object property
    ```javascript
    const { matches } = require(‘z’)

const person = { name: ‘Maria’ }
matches(person)(
(x = { name: ‘John’ }) => console.log(‘John you are not welcome!’),
(x) => console.log(Hey ${x.name}, you are welcome!)
)

//output: Hey Maria, you are welcome!

  1. - **Example:** Matches by type or instances
  2. ```javascript
  3. const { matches } = require('z')
  4. const result = matches(1)(
  5. (x = 2) => 'number 2 is the best!!!',
  6. (x = Number) => `number ${x} is not that good`,
  7. (x = Date) => 'blaa.. dates are awful!'
  8. )
  9. console.log(result) // output: number 1 is not that good
  • Example: matches Array content

To match array content you need create multiple arguments for the match function, such as (a, b, c, tail) => {} , then each variable match each item from array. Note: last variable contains all remaining array items, formally named tail. Examples:
```javascript
const { matches } = require(‘z’)

matches([1, 2, 3, 4, 5])(
(a, b, c, tail) => ‘a = 1, b = 2, c = 3, tail = [4, 5]’
)

matches([1, 2])(
(a, tail) => ‘a = 1, b = [2]’
)

matches([1])(
(a, b, tail) => ‘Will not match here’,
(a = 2, tail = []) => ‘Will not match here’,
(a = 1, tail = []) => ‘Will match here, tail = []’
)

  1. - **Example:** Powerful recursive code which will remove sequential repeated items from Array.
  2. > Can be mind blowing if its the first time you meet pattern matching, but you are gonna understand it!
  3. ```javascript
  4. const { matches } = require('z')
  5. const compress = (numbers) => {
  6. return matches(numbers)(
  7. (x, y, xs) => x === y
  8. ? compress([x].concat(xs))
  9. : [x].concat(compress([y].concat(xs))),
  10. (x, [y]) => x === y // stopping condition
  11. ? [x]
  12. : [x, y],
  13. x => x
  14. )
  15. }
  16. compress([1, 1, 2, 3, 4, 4, 4]) //output: [1, 2, 3, 4]

License

Apache 2.0