mirror of
https://github.com/unti-io/go-utils.git
synced 2025-10-28 10:21:31 +08:00
[v1.5.7] 参数归一化
This commit is contained in:
@@ -32,7 +32,7 @@ func ArrayRemove(array []string, args ...string) []string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ArrayUnique - 数组去重
|
// ArrayUnique - 数组去重
|
||||||
func ArrayUnique[T any](array []T) (slice []any) {
|
func ArrayUnique[T any](array []T) (slice []T) {
|
||||||
list := make(map[any]bool)
|
list := make(map[any]bool)
|
||||||
for _, item := range array {
|
for _, item := range array {
|
||||||
if !list[item] {
|
if !list[item] {
|
||||||
@@ -44,7 +44,7 @@ func ArrayUnique[T any](array []T) (slice []any) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ArrayEmpty - 数组去空
|
// ArrayEmpty - 数组去空
|
||||||
func ArrayEmpty[T any](array []T) (slice []any) {
|
func ArrayEmpty[T any](array []T) (slice []T) {
|
||||||
for _, item := range array {
|
for _, item := range array {
|
||||||
if !Is.Empty(item) {
|
if !Is.Empty(item) {
|
||||||
slice = append(slice, item)
|
slice = append(slice, item)
|
||||||
|
|||||||
@@ -77,3 +77,65 @@ func (this *UnityClass) Keys(param any, reg ...any) (keys []any) {
|
|||||||
|
|
||||||
return keys
|
return keys
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Int 参数归一化
|
||||||
|
func (this *UnityClass) Int(value ...any) (array []int) {
|
||||||
|
|
||||||
|
fn := func(value any) (resp []int) {
|
||||||
|
|
||||||
|
types := []string{"string", "int", "int64", "float", "float64"}
|
||||||
|
|
||||||
|
if InArray(Get.Type(value), types) {
|
||||||
|
// 正则提取数字部分,包含0
|
||||||
|
item := regexp.MustCompile(`-?\d+`).FindAllString(cast.ToString(value), -1)
|
||||||
|
for _, val := range item {
|
||||||
|
resp = append(resp, cast.ToInt(val))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if Get.Type(value) == "slice" {
|
||||||
|
item := cast.ToStringSlice(value)
|
||||||
|
for _, val := range item {
|
||||||
|
resp = append(resp, cast.ToInt(val))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resp
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, val := range value {
|
||||||
|
array = append(array, fn(val)...)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ArrayUnique(array)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Float 参数归一化
|
||||||
|
func (this *UnityClass) Float(value ...any) (array []float64) {
|
||||||
|
|
||||||
|
fn := func(value any) (resp []float64) {
|
||||||
|
|
||||||
|
types := []string{"string", "int", "int64", "float", "float64"}
|
||||||
|
|
||||||
|
if InArray(Get.Type(value), types) {
|
||||||
|
// 正则提取数字部分,包含正数,负数,0和小数
|
||||||
|
item := regexp.MustCompile(`-?\d+(\.\d+)?`).FindAllString(cast.ToString(value), -1)
|
||||||
|
|
||||||
|
for _, val := range item {
|
||||||
|
resp = append(resp, cast.ToFloat64(val))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if Get.Type(value) == "slice" {
|
||||||
|
item := cast.ToStringSlice(value)
|
||||||
|
for _, val := range item {
|
||||||
|
resp = append(resp, cast.ToFloat64(val))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resp
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, val := range value {
|
||||||
|
array = append(array, fn(val)...)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ArrayUnique(array)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user