From 7d442ff64ea1eaabf07b6f4ae2ae3cbdb8cd9b1d Mon Sep 17 00:00:00 2001 From: itchyny Date: Thu, 25 Jun 2020 22:03:40 +0900 Subject: [PATCH] normalize numbers updating maps and arrays destructively --- normalize.go | 19 ++++++------------- operator.go | 3 ++- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/normalize.go b/normalize.go index 0a89fdc5..d1bf86f6 100644 --- a/normalize.go +++ b/normalize.go @@ -4,7 +4,6 @@ import ( "encoding/json" "math" "math/big" - "reflect" "strings" ) @@ -66,17 +65,15 @@ func normalizeNumbers(v interface{}) interface{} { case float32: return float64(v) case map[string]interface{}: - u := make(map[string]interface{}, len(v)) - for k, v := range v { - u[k] = normalizeNumbers(v) + for k, x := range v { + v[k] = normalizeNumbers(x) } - return u + return v case []interface{}: - u := make([]interface{}, len(v)) - for i, v := range v { - u[i] = normalizeNumbers(v) + for i, x := range v { + v[i] = normalizeNumbers(x) } - return u + return v default: return v } @@ -140,7 +137,3 @@ func deleteEmpty(v interface{}) interface{} { return v } } - -func deepEqual(x, y interface{}) bool { - return reflect.DeepEqual(normalizeNumbers(x), normalizeNumbers(y)) -} diff --git a/operator.go b/operator.go index 08d7be81..9a12cfc4 100644 --- a/operator.go +++ b/operator.go @@ -3,6 +3,7 @@ package gojq import ( "math" "math/big" + "reflect" "strings" ) @@ -369,7 +370,7 @@ func funcOpSub(_, l, r interface{}) interface{} { for _, v := range l { var found bool for _, w := range r { - if deepEqual(v, w) { + if reflect.DeepEqual(normalizeNumbers(v), normalizeNumbers(w)) { found = true break }