Skip to content

Commit ab1d361

Browse files
authored
Make filter_out faster (#650)
1 parent 2ee362f commit ab1d361

1 file changed

Lines changed: 11 additions & 4 deletions

File tree

lib/floki/filter_out.ex

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,22 @@ defmodule Floki.FilterOut do
3131
defp filter(_, _), do: true
3232

3333
defp mapper(nodes, selector) when is_list(nodes) do
34-
nodes
35-
|> Stream.filter(&filter(&1, selector))
36-
|> Stream.map(&mapper(&1, selector))
37-
|> Enum.to_list()
34+
do_mapper(nodes, selector, [])
3835
end
3936

4037
defp mapper({nodetext, x, y}, selector) do
4138
{nodetext, x, mapper(y, selector)}
4239
end
4340

4441
defp mapper(nodetext, _), do: nodetext
42+
43+
defp do_mapper([], _selector, acc), do: Enum.reverse(acc)
44+
45+
defp do_mapper([head | tail], selector, acc) do
46+
if filter(head, selector) do
47+
do_mapper(tail, selector, [mapper(head, selector) | acc])
48+
else
49+
do_mapper(tail, selector, acc)
50+
end
51+
end
4552
end

0 commit comments

Comments
 (0)