【问题标题】:Javascript json filter deep childJavascript json过滤深层孩子
【发布时间】:2017-03-03 21:49:22
【问题描述】:

我正在尝试根据子值过滤 json:假设:

[
    {
        "Date": "2017-03-02T00:00:00",
        "Matches": [
            {
                "Id": 67,
                "NameSeo": "teste-02-33",
                "IsLive": true
            },
            {
                "Id": 63,
                "NameSeo": "teste-ao-vivo-always",
                "IsLive": true
            }
        ]
    },
    {
        "Date": "2017-03-13T00:00:00",
        "Matches": [
            {
                "Id": 64,
                "NameSeo": "san-avai-13-03-17-13-00-caninde",
                "IsLive": false
            },
            {
                "Id": 66,
                "NameSeo": "teste-01-xxx",
                "IsLive": false
            }
        ]
    },
    {
        "Date": "2017-03-23T00:00:00",
        "Matches": [
            {
                "Id": 65,
                "NameSeo": "gre-cor-23-03-17-17-30-pacaembu",
                "IsLive": false
            }
        ]
    }
]

如何计算 "IsLive" = true 的 "Matches" ?在此示例中为 2。将是 1 个日期,有 2 场现场比赛(但我不关心日期,只是我有 2 场现场比赛)。

我能得到的更接近的是:

x.filter(x => x.Matches.filter(w => w.IsLive)).length

但这里它返回 3,我猜是所有日期。

x.filter(x => x.Matches.IsLive).length

这会返回 0

【问题讨论】:

  • x.filter(x => x.Matches.filter(w => w.IsLive)).length 不起作用,因为x.Matches.filter(w => w.IsLive) 总是返回一个数组,如果你在外部filter 中返回它,它总是被认为是真实的。这就是结果中计算所有 3 个对象的原因。
  • 那是我忘记提出的问题,现在我明白为什么它返回 3.. 谢谢。

标签: javascript arrays json filter


【解决方案1】:

试试:

x.reduce((count, item) => count + item.Matches.filter(w => w.IsLive).length, 0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    相关资源
    最近更新 更多