What is unist-util-filter?
The `unist-util-filter` package is a utility for filtering nodes in a Unist syntax tree. It allows you to traverse and selectively remove nodes based on a predicate function, making it useful for tasks such as cleaning up or transforming abstract syntax trees (ASTs).
What are unist-util-filter's main functionalities?
Filter nodes based on a predicate
This feature allows you to filter nodes in a Unist tree based on a predicate function. In this example, the tree is filtered to remove paragraphs containing the text 'World'.
const filter = require('unist-util-filter');
const tree = {
type: 'root',
children: [
{ type: 'paragraph', children: [{ type: 'text', value: 'Hello' }] },
{ type: 'paragraph', children: [{ type: 'text', value: 'World' }] }
]
};
const filteredTree = filter(tree, node => node.type !== 'paragraph' || node.children[0].value !== 'World');
console.log(filteredTree);
Filter nodes with a specific type
This feature allows you to filter out nodes of a specific type. In this example, all 'heading' nodes are removed from the tree.
const filter = require('unist-util-filter');
const tree = {
type: 'root',
children: [
{ type: 'paragraph', children: [{ type: 'text', value: 'Hello' }] },
{ type: 'heading', children: [{ type: 'text', value: 'Title' }] }
]
};
const filteredTree = filter(tree, node => node.type !== 'heading');
console.log(filteredTree);
Other packages similar to unist-util-filter
unist-util-visit
The `unist-util-visit` package is used for traversing Unist syntax trees. Unlike `unist-util-filter`, which removes nodes based on a predicate, `unist-util-visit` allows you to visit nodes and perform actions on them. It is more focused on traversal and manipulation rather than filtering.
unist-util-map
The `unist-util-map` package allows you to transform nodes in a Unist tree by applying a function to each node. While `unist-util-filter` is used for removing nodes, `unist-util-map` is used for transforming nodes, making it useful for different kinds of tree manipulations.
unist-util-remove
The `unist-util-remove` package is specifically designed for removing nodes from a Unist tree based on a predicate. It is similar to `unist-util-filter` but focuses solely on the removal aspect, without the additional filtering capabilities.
unist-util-filter
unist utility to create a new tree with all nodes that pass the
given test.
Install
npm:
npm install unist-util-filter
Use
var u = require('unist-builder')
var filter = require('unist-util-filter')
var tree = u('root', [
u('leaf', '1'),
u('node', [u('leaf', '2'), u('node', [u('leaf', '3')])]),
u('leaf', '4')
])
var newTree = filter(tree, node => node.type !== 'leaf' || node.value % 2 === 0)
console.dir(newTree, {depth: null})
Yields:
{
type: 'root',
children: [
{type: 'node', children: [{type: 'leaf', value: '2'}]},
{type: 'leaf', value: '4'}
]
}
API
filter(tree[, options][, test])
Create a new tree consisting of copies of all nodes that pass test
.
The tree is walked in preorder (NLR), visiting the node itself, then its
head, etc.
Parameters
tree
(Node?
)
— Tree to filteroptions.cascade
(boolean
, default: true
)
— Whether to drop parent nodes if they had children, but all their children
were filtered outtest
(Test
, optional) — is
-compatible test (such as a
type)
Returns
Node?
— New filtered tree.
null
is returned if tree
itself didn’t pass the test, or is cascaded away.
Related
Contribute
See contributing.md
in syntax-tree/.github
for ways to get
started.
See support.md
for ways to get help.
This project has a code of conduct.
By interacting with this repository, organization, or community you agree to
abide by its terms.
License
MIT © Eugene Sharygin