deepFilter()
Creates a new children array with all elements that pass the test implemented by the provided function called recursively on every child (and its children) of the array.
deepFilter(
  children: ReactNode | ReactNode[],
  filterFn: (child: ReactNode, index?: number, children?: ReactNode[]): boolean,
): ReactNode[]
Arguments
- children
- The children array from the element where is used.
- filterFn
- Predicate to test recursively each element (and its children) of the children array. Return true to keep the element and false to remove it. It accepts three arguments:
-  - child
- The current child element being processed.
- index
- The index of the current child element being processed.
- children
- The children array that filter was called upon.
 
Return Value
A new children array with the elements and their children that pass the test. If no elements pass the test, an empty array will be returned.
Example
import React, { ReactElement, ReactNode } from 'react';
import { render } from 'react-dom';
import { deepFilter } from 'react-children-utilities';
interface Props {
  children?: ReactNode;
}
const DeepFiltered = ({ children }: Props): ReactElement => (
  <div>
    {deepFilter(children, (item: ReactNode) =>
      Boolean(item && (item as ReactElement).type && (item as ReactElement).type === 'span'),
    )}
  </div>
);
const Example = (): ReactElement => (
  <DeepFiltered>
    <span>1</span>
    <span>2</span>
    <span>
      <strong>3</strong>
      <span>
        <strong>4</strong>
        <span>5</span>
      </span>
    </span>
  </DeepFiltered>
);
render(<Example />, document.body)
// Result:
// <div>
//   <span>1</span>
//   <span>2</span>
//   <span>
//     <span>
//       <span>5</span>
//     </span>
//   </span>
// </div>