【问题标题】:How to determine if array contains an object with an attribute that equals a given value [closed]如何确定数组是否包含具有等于给定值的属性的对象[关闭]
【发布时间】:2021-02-09 03:21:44
【问题描述】:

我有一个这样的数组,它将来自 API 的响应。

[
    {
        "id": "F1eOrsr3g7gad6",
        "created_at": 1591951315,
        "url": "https://example.com",
        "secret": "1234",
        "secret_exists": true
    },
    {
        "id": "FintcvTBaYwPz2",
        "created_at": 1591953315,
        "url": "http://example.com",
        "secret": "34532",
        "secret_exists": true
    }
]

如何检查这个数组是否有值“F1eOrsr3g7gad6”?

我曾尝试编写一个函数,如果索引值存在则返回该值。

func isExists(key string, value string, data []map[string]interface{}) (result int) {
    result = -1
    for i, search := range data {
        if search[key] == value {
            result = i
            break
        }
    }
    return result
}
var value string = "FintcvTBaYwPz2"
var key string = "id"
result := isExists(key, value, data) // here data will be the array which I want to pass.
fmt.Println("Result: ", result)

【问题讨论】:

  • JSON 将响应解码为切片结构。然后遍历切片找到匹配的id
  • 使用 this site 将 JSON 响应转换为具有代表性的 go 结构。
  • 您的问题是什么?您需要什么帮助?

标签: arrays go arrayobject


【解决方案1】:

您已经完成了所有艰苦的工作,只需更改函数的签名以返回 bool 而不是索引,并返回 truefalse

func isExists(key string, value string, data []map[string]interface{}) (exists bool) {

    for _, search := range data {
        if search[key] == value {
            return true
        }
    }
    return false
}

https://play.golang.org/p/lJGwa6pZaX5

【讨论】:

  • 谢谢@colm。当我将对象数组作为函数中的参数传递时,出现此错误。 cannot convert arr (type []interface {}) to type []byte
  • 检查我包含的游乐场链接 - 它展示了如何将 JSON 字节流转换为可用的 go 数据类型。
猜你喜欢
  • 2012-01-03
  • 2016-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
相关资源
最近更新 更多