...
1 package govalidator
2
3
4 type Iterator func(interface{}, int)
5
6
7 type ResultIterator func(interface{}, int) interface{}
8
9
10 type ConditionIterator func(interface{}, int) bool
11
12
13 type ReduceIterator func(interface{}, interface{}) interface{}
14
15
16 func Some(array []interface{}, iterator ConditionIterator) bool {
17 res := false
18 for index, data := range array {
19 res = res || iterator(data, index)
20 }
21 return res
22 }
23
24
25 func Every(array []interface{}, iterator ConditionIterator) bool {
26 res := true
27 for index, data := range array {
28 res = res && iterator(data, index)
29 }
30 return res
31 }
32
33
34 func Reduce(array []interface{}, iterator ReduceIterator, initialValue interface{}) interface{} {
35 for _, data := range array {
36 initialValue = iterator(initialValue, data)
37 }
38 return initialValue
39 }
40
41
42 func Each(array []interface{}, iterator Iterator) {
43 for index, data := range array {
44 iterator(data, index)
45 }
46 }
47
48
49 func Map(array []interface{}, iterator ResultIterator) []interface{} {
50 var result = make([]interface{}, len(array))
51 for index, data := range array {
52 result[index] = iterator(data, index)
53 }
54 return result
55 }
56
57
58 func Find(array []interface{}, iterator ConditionIterator) interface{} {
59 for index, data := range array {
60 if iterator(data, index) {
61 return data
62 }
63 }
64 return nil
65 }
66
67
68 func Filter(array []interface{}, iterator ConditionIterator) []interface{} {
69 var result = make([]interface{}, 0)
70 for index, data := range array {
71 if iterator(data, index) {
72 result = append(result, data)
73 }
74 }
75 return result
76 }
77
78
79 func Count(array []interface{}, iterator ConditionIterator) int {
80 count := 0
81 for index, data := range array {
82 if iterator(data, index) {
83 count = count + 1
84 }
85 }
86 return count
87 }
88
View as plain text