https://github.com/roonie007/flatten
Flatten or unflatten a nested Javascript object by delimiter keys.
https://github.com/roonie007/flatten
deno typescript
Last synced: about 2 months ago
JSON representation
Flatten or unflatten a nested Javascript object by delimiter keys.
- Host: GitHub
- URL: https://github.com/roonie007/flatten
- Owner: roonie007
- License: mit
- Created: 2021-11-17T23:07:48.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2022-04-17T13:59:21.000Z (about 4 years ago)
- Last Synced: 2026-03-12T07:49:08.866Z (4 months ago)
- Topics: deno, typescript
- Language: TypeScript
- Homepage:
- Size: 4.88 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Flatten
Flatten or unflatten a nested Javascript object by delimiter keys.
## Usage
### Flatten
```javascript
import { flatten } from "https://deno.land/x/flatten/mod.ts";
const obj = {
key1: {
keyA: "valueI",
},
key2: {
keyB: "valueII",
},
key3: { a: { b: { c: 2 } } },
arr: ["item1", null, ["nested1", "nested2"]],
};
flatten(obj);
// {
// "key1.keyA": "valueI",
// "key2.keyB": "valueII",
// "key3.a.b.c": 2,
// "arr.0": "item1",
// "arr.1": null,
// "arr.2.0": "nested1",
// "arr.2.1": "nested2",
// "arr.3.key4.nested": 1,
// "arr.3.key5": undefined
// }
flatten(obj, { flattenArray: false });
// {
// "key1.keyA": "valueI",
// "key2.keyB": "valueII",
// "key3.a.b.c": 2,
// arr: [
// "item1",
// null,
// [ "nested1", "nested2" ],
// { key4: { nested: 1 }, key5: undefined }
// ]
// }
flatten(obj, { delimiter: "--" });
// {
// "key1--keyA": "valueI",
// "key2--keyB": "valueII",
// "key3--a--b--c": 2,
// "arr--0": "item1",
// "arr--1": null,
// "arr--2--0": "nested1",
// "arr--2--1": "nested2",
// "arr--3--key4--nested": 1,
// "arr--3--key5": undefined
// }
flatten(obj, ignoreIfProperty: ["key3"]);
// Since key3 is an ignored property b, then it will not be flattened
// {
// "key1.keyA": "valueI",
// "key2.keyB": "valueII",
// "key3": { a: { b: { c: 2 } } },
// "arr.0": "item1",
// "arr.1": null,
// "arr.2.0": "nested1",
// "arr.2.1": "nested2",
// "arr.3.key4.nested": 1,
// "arr.3.key5": undefined
// }
flatten(obj, ignoreIfContainsProperty: ["b"]);
// Since key3.a contains an ignored property "b", then it will not be flattened
// {
// "key1.keyA": "valueI",
// "key2.keyB": "valueII",
// "key3.a": { b: { c: 2 } },
// "arr.0": "item1",
// "arr.1": null,
// "arr.2.0": "nested1",
// "arr.2.1": "nested2",
// "arr.3.key4.nested": 1,
// "arr.3.key5": undefined
// }
```
#### Options
is an object composed of
**delimiter: _string_** (default = '.')
Use a custom delimiter instead of `.` when flattening your objects.
**flattenArray: _boolean_** (default = true)
Flatten the arrays and their items.
### Unflatten
```javascript
import { unflatten } from "https://deno.land/x/flatten/mod.ts";
const flattedObj = {
"key1.keyA": "valueI",
"key2.keyB": "valueII",
"key3.a.b.c": 2,
"arr.0": "item1",
"arr.1": null,
"arr.2.0": "nested1",
"arr.2.1": "nested2",
"arr.3.key4.nested": 1,
"arr.3.key5": undefined,
};
unflatten(flattedObj);
// {
// key1: {
// keyA: 'valueI'
// },
// key2: {
// keyB: 'valueII'
// },
// key3: { a: { b: { c: 2 } } },
// arr: ['item1',null,['nested1', 'nested2']]
// }
const flattedObjWithDoubleDashes = {
"key1--keyA": "valueI",
"key2--keyB": "valueII",
"key3--a--b--c": 2,
"arr--0": "item1",
"arr--1": null,
"arr--2--0": "nested1",
"arr--2--1": "nested2",
"arr--3--key4--nested": 1,
"arr--3--key5": undefined,
};
unflatten(flattedObjWithDoubleDashes, "--");
// {
// key1: {
// keyA: 'valueI'
// },
// key2: {
// keyB: 'valueII'
// },
// key3: { a: { b: { c: 2 } } },
// arr: ['item1',null,['nested1', 'nested2']]
// }
```
#### Options
**delimiter: _string_** (default = '.')
Use a custom delimiter instead of `.` when flattening your objects.
## License
MIT