|
- package govalidator
-
- // Iterator is the function that accepts element of slice/array and its index
- type Iterator func(interface{}, int)
-
- // ResultIterator is the function that accepts element of slice/array and its index and returns any result
- type ResultIterator func(interface{}, int) interface{}
-
- // ConditionIterator is the function that accepts element of slice/array and its index and returns boolean
- type ConditionIterator func(interface{}, int) bool
-
- // Each iterates over the slice and apply Iterator to every item
- func Each(array []interface{}, iterator Iterator) {
- for index, data := range array {
- iterator(data, index)
- }
- }
-
- // Map iterates over the slice and apply ResultIterator to every item. Returns new slice as a result.
- func Map(array []interface{}, iterator ResultIterator) []interface{} {
- var result = make([]interface{}, len(array))
- for index, data := range array {
- result[index] = iterator(data, index)
- }
- return result
- }
-
- // Find iterates over the slice and apply ConditionIterator to every item. Returns first item that meet ConditionIterator or nil otherwise.
- func Find(array []interface{}, iterator ConditionIterator) interface{} {
- for index, data := range array {
- if iterator(data, index) {
- return data
- }
- }
- return nil
- }
-
- // Filter iterates over the slice and apply ConditionIterator to every item. Returns new slice.
- func Filter(array []interface{}, iterator ConditionIterator) []interface{} {
- var result = make([]interface{}, 0)
- for index, data := range array {
- if iterator(data, index) {
- result = append(result, data)
- }
- }
- return result
- }
-
- // Count iterates over the slice and apply ConditionIterator to every item. Returns count of items that meets ConditionIterator.
- func Count(array []interface{}, iterator ConditionIterator) int {
- count := 0
- for index, data := range array {
- if iterator(data, index) {
- count = count + 1
- }
- }
- return count
- }
|