1 | # FClone
|
2 |
|
3 | [![Build Status](https://travis-ci.org/soyuka/fclone.svg?branch=master)](https://travis-ci.org/soyuka/fclone)
|
4 |
|
5 | This module clones a Javascript object in safe mode (eg: drops circular values) recursively. Circular values are replaced with a string: `'[Circular]'`.
|
6 |
|
7 | Ideas from [tracker1/safe-clone-deep](https://github.com/tracker1/safe-clone-deep). I improved the workflow a bit by:
|
8 | - refactoring the code (complete rewrite)
|
9 | - fixing node 6+
|
10 | - minor performance tweaks
|
11 | - use of `Array.isArray` and `Buffer.isBuffer`
|
12 |
|
13 | ## Installation
|
14 |
|
15 | ```bash
|
16 | npm install fclone
|
17 | # or
|
18 | bower install fclone
|
19 | ```
|
20 |
|
21 | ## Usage
|
22 |
|
23 | ```javascript
|
24 | const fclone = require('fclone')
|
25 |
|
26 | let a = {b: a, c: 'hello'}
|
27 | let o = fclone(a)
|
28 |
|
29 | console.log(o)
|
30 | // outputs: { c: 'hello', b: '[Circular]' }
|
31 | ```
|
32 |
|
33 | ## Benchmarks
|
34 |
|
35 | Some benchs:
|
36 |
|
37 | ```
|
38 | fclone x 13,342 ops/sec ±3.83% (79 runs sampled)
|
39 | fclone + json.stringify x 7,311 ops/sec ±3.99% (77 runs sampled)
|
40 | jsan x 4,419 ops/sec ±3.11% (86 runs sampled)
|
41 | circularjson x 4,294 ops/sec ±0.82% (91 runs sampled)
|
42 | deepcopy x 5,298 ops/sec ±0.76% (83 runs sampled)
|
43 | json-stringify-safe x 5,201 ops/sec ±0.82% (84 runs sampled)
|
44 | Fastest is fclone
|
45 | ```
|