gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/datax/mapx/iter.go (about)

     1  package mapx
     2  
     3  func WalkMap(a map[string]interface{}, f func(parent map[string]interface{}, key string, val interface{})) {
     4  	for key, val := range a {
     5  		f(a, key, val)
     6  		WalkAny(a, f)
     7  	}
     8  }
     9  
    10  func IterArray(a []interface{}) (r []interface{}) {
    11  	r = make([]interface{}, len(a), cap(a))
    12  	for i, val := range a {
    13  		r[i] = CloneAny(val)
    14  	}
    15  	return
    16  }
    17  
    18  func WalkAny(a interface{}, f func(parent map[string]interface{}, key string, val interface{})) (r interface{}) {
    19  	switch v := a.(type) {
    20  	case map[string]interface{}:
    21  		r = CloneMap(v)
    22  	case []interface{}:
    23  		r = CloneArray(v)
    24  	default:
    25  		r = a
    26  	}
    27  	return
    28  }