Rename js snippets
This commit is contained in:
35
snippets/js/s/nest-objects.md
Normal file
35
snippets/js/s/nest-objects.md
Normal file
@ -0,0 +1,35 @@
|
||||
---
|
||||
title: Nest objects
|
||||
type: snippet
|
||||
language: javascript
|
||||
tags: [object,recursion]
|
||||
cover: birds
|
||||
dateModified: 2020-10-21T21:54:53+03:00
|
||||
---
|
||||
|
||||
Nests recursively objects linked to one another in a flat array.
|
||||
|
||||
- Use recursion.
|
||||
- Use `Array.prototype.filter()` to filter the items where the `id` matches the `link`.
|
||||
- Use `Array.prototype.map()` to map each item to a new object that has a `children` property which recursively nests the items based on which ones are children of the current item.
|
||||
- Omit the second argument, `id`, to default to `null` which indicates the object is not linked to another one (i.e. it is a top level object).
|
||||
- Omit the third argument, `link`, to use `'parent_id'` as the default property which links the object to another one by its `id`.
|
||||
|
||||
```js
|
||||
const nest = (items, id = null, link = 'parent_id') =>
|
||||
items
|
||||
.filter(item => item[link] === id)
|
||||
.map(item => ({ ...item, children: nest(items, item.id, link) }));
|
||||
```
|
||||
|
||||
```js
|
||||
const comments = [
|
||||
{ id: 1, parent_id: null },
|
||||
{ id: 2, parent_id: 1 },
|
||||
{ id: 3, parent_id: 1 },
|
||||
{ id: 4, parent_id: 2 },
|
||||
{ id: 5, parent_id: 4 }
|
||||
];
|
||||
const nestedComments = nest(comments);
|
||||
// [{ id: 1, parent_id: null, children: [...] }]
|
||||
```
|
||||
Reference in New Issue
Block a user