diff --git a/builtin/core.wren b/builtin/core.wren index 1fd024de..8560f57a 100644 --- a/builtin/core.wren +++ b/builtin/core.wren @@ -16,4 +16,12 @@ class List { } return result } + + where (f) { + var result = [] + for (element in this) { + if (f.call(element)) result.add(element) + } + return result + } } diff --git a/src/wren_core.c b/src/wren_core.c index 6db28350..b287a4ca 100644 --- a/src/wren_core.c +++ b/src/wren_core.c @@ -59,6 +59,14 @@ static const char* libSource = " }\n" " return result\n" " }\n" +" \n" +" where (f) {\n" +" var result = []\n" +" for (element in this) {\n" +" if (f.call(element)) result.add(element)\n" +" }\n" +" return result\n" +" }\n" "}\n"; // Validates that the given argument in [args] is a Num. Returns true if it is. diff --git a/test/list/where.wren b/test/list/where.wren new file mode 100644 index 00000000..d8b0a2f3 --- /dev/null +++ b/test/list/where.wren @@ -0,0 +1,8 @@ +var a = [1, 2, 3] +var moreThan1 = fn (x) { return x > 1 } +var moreThan10 = fn (x) { return x > 10 } +var b = a.where(moreThan1) +var c = a.where(moreThan10) + +IO.print(b) // expect: [2, 3] +IO.print(c) // expect: []