v0.8.17 + xiang.helper.ArraySplit
This commit is contained in:
parent
9076dfe7f8
commit
e1f5c33f00
5 changed files with 91 additions and 1 deletions
|
|
@ -14,6 +14,27 @@ type ArrayPluckValue struct {
|
||||||
Items []map[string]interface{} `json:"items"`
|
Items []map[string]interface{} `json:"items"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ArraySplit 将多条数记录集合,分解为一个 columns:[]string 和 values: [][]interface{}
|
||||||
|
func ArraySplit(records []map[string]interface{}) ([]string, [][]interface{}) {
|
||||||
|
columns := []string{}
|
||||||
|
values := [][]interface{}{}
|
||||||
|
if len(records) == 0 {
|
||||||
|
return columns, values
|
||||||
|
}
|
||||||
|
for column := range records[0] {
|
||||||
|
columns = append(columns, column)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, record := range records {
|
||||||
|
value := []interface{}{}
|
||||||
|
for _, key := range columns {
|
||||||
|
value = append(value, record[key])
|
||||||
|
}
|
||||||
|
values = append(values, value)
|
||||||
|
}
|
||||||
|
return columns, values
|
||||||
|
}
|
||||||
|
|
||||||
// ArrayPluck 将多个数据记录集合,合并为一个数据记录集合
|
// ArrayPluck 将多个数据记录集合,合并为一个数据记录集合
|
||||||
// columns: ["城市", "行业", "计费"]
|
// columns: ["城市", "行业", "计费"]
|
||||||
// pluck: {
|
// pluck: {
|
||||||
|
|
|
||||||
|
|
@ -21,3 +21,16 @@ func TestArrayPluck(t *testing.T) {
|
||||||
maps.Of(item).Has("计费")
|
maps.Of(item).Has("计费")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestArraySplit(t *testing.T) {
|
||||||
|
records := []map[string]interface{}{
|
||||||
|
{"name": "阿里云计算有限公司", "short_name": "阿里云"},
|
||||||
|
{"name": "世纪互联蓝云", "short_name": "上海蓝云"},
|
||||||
|
}
|
||||||
|
columns, values := ArraySplit(records)
|
||||||
|
assert.Equal(t, 2, len(columns))
|
||||||
|
assert.Equal(t, 2, len(values))
|
||||||
|
for _, value := range values {
|
||||||
|
assert.Equal(t, 2, len(value))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import (
|
||||||
func init() {
|
func init() {
|
||||||
// 注册处理器
|
// 注册处理器
|
||||||
gou.RegisterProcessHandler("xiang.helper.ArrayPluck", ProcessArrayPluck)
|
gou.RegisterProcessHandler("xiang.helper.ArrayPluck", ProcessArrayPluck)
|
||||||
|
gou.RegisterProcessHandler("xiang.helper.ArraySplit", ProcessArraySplit)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -34,3 +35,33 @@ func ProcessArrayPluck(process *gou.Process) interface{} {
|
||||||
pluck := process.ArgsMap(1)
|
pluck := process.ArgsMap(1)
|
||||||
return ArrayPluck(columns, pluck)
|
return ArrayPluck(columns, pluck)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ProcessArraySplit xiang.helper.ArraySplit 将多条数记录集合,分解为一个 columns:[]string 和 values: [][]interface{}
|
||||||
|
func ProcessArraySplit(process *gou.Process) interface{} {
|
||||||
|
process.ValidateArgNums(1)
|
||||||
|
args := process.Args[0]
|
||||||
|
records := []map[string]interface{}{}
|
||||||
|
|
||||||
|
switch args.(type) {
|
||||||
|
case []interface{}:
|
||||||
|
for _, v := range args.([]interface{}) {
|
||||||
|
value, ok := v.(map[string]interface{})
|
||||||
|
if ok {
|
||||||
|
records = append(records, value)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
exception.New("参数错误: 第1个参数不是字符串数组", 400).Ctx(process.Args[0]).Throw()
|
||||||
|
}
|
||||||
|
case []map[string]interface{}:
|
||||||
|
records = args.([]map[string]interface{})
|
||||||
|
|
||||||
|
default:
|
||||||
|
exception.New("参数错误: 第1个参数不是字符串数组", 400).Ctx(process.Args[0]).Throw()
|
||||||
|
break
|
||||||
|
}
|
||||||
|
columns, values := ArraySplit(records)
|
||||||
|
return map[string]interface{}{
|
||||||
|
"columns": columns,
|
||||||
|
"values": values,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,3 +29,28 @@ func TestProcessArrayPluck(t *testing.T) {
|
||||||
maps.Of(item).Has("计费")
|
maps.Of(item).Has("计费")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestProcessArraySplit(t *testing.T) {
|
||||||
|
args := []interface{}{
|
||||||
|
[]map[string]interface{}{
|
||||||
|
{"name": "阿里云计算有限公司", "short_name": "阿里云"},
|
||||||
|
{"name": "世纪互联蓝云", "short_name": "上海蓝云"},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
process := gou.NewProcess("xiang.helper.ArraySplit", args...)
|
||||||
|
response := process.Run()
|
||||||
|
assert.NotNil(t, response)
|
||||||
|
res, ok := response.(map[string]interface{})
|
||||||
|
assert.True(t, ok)
|
||||||
|
|
||||||
|
columns, ok := res["columns"].([]string)
|
||||||
|
assert.True(t, ok)
|
||||||
|
|
||||||
|
values, ok := res["values"].([][]interface{})
|
||||||
|
assert.True(t, ok)
|
||||||
|
assert.Equal(t, 2, len(columns))
|
||||||
|
assert.Equal(t, 2, len(values))
|
||||||
|
for _, value := range values {
|
||||||
|
assert.Equal(t, 2, len(value))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// VERSION 版本号
|
// VERSION 版本号
|
||||||
const VERSION = "0.8.16"
|
const VERSION = "0.8.17"
|
||||||
|
|
||||||
// DOMAIN 许可域
|
// DOMAIN 许可域
|
||||||
const DOMAIN = "*.iqka.com"
|
const DOMAIN = "*.iqka.com"
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue