function filter( predicate, thisArg ) {
			var bool;
			var tmp;
			var f;
			var i;
			if ( this !== tuple ) { // eslint-disable-line no-invalid-this
				throw new TypeError( 'invalid invocation. `this` is not host tuple.' );
			}
			if ( !isFunction( predicate ) ) {
				throw new TypeError( format( 'invalid argument. First argument must be a function. Value: `%s`.', predicate ) );
			}
			tmp = [];
			f = [];
			for ( i = 0; i < nfields; i++ ) {
				bool = predicate.call( thisArg, tuple[ i ], i, fields[ indices[i] ], tuple );
				if ( bool ) {
					f.push( fields[ indices[i] ] );
					tmp.push( tuple[ i ] );
				}
			}
			if ( f.length === nfields ) {
				return namedtypedtuple( tmp, dtype );
			}
			if ( f.length ) {
				return factory( f, opts )( tmp );
			}
			return null;
		}
Creates a new tuple which includes those elements for which a predicate function returns a truthy value.

## Notes

-   The returned tuple has the same data type as the host tuple.
-   If a predicate function does not return a truthy value for any tuple element, the function returns `null`.

@private
@memberof tuple
@param {Function} predicate - filter (predicate) function
@param {*} [thisArg] - execution context
@throws {TypeError} `this` must be the host tuple
@throws {TypeError} first argument must be a function
@returns {(TypedArray|null)} new tuple