代码之家  ›  专栏  ›  技术社区  ›  user2340612

数组上的Lodash性质迭代器

  •  0
  • user2340612  · 技术社区  · 6 年前

    假设我有以下JSON对象:

    [
        {
            "name": "productA",
            "prices": [
                {
                    "currency": "USD",
                    "price": 10.0
                },
                {
                    "currency": "EUR",
                    "price": 9.0
                }
            ]
        },
        {
            "name": "productB",
            "prices": [
                {
                    "currency": "GBP",
                    "price": 18.0
                },
                {
                    "currency": "EUR",
                    "price": 20.0
                }
            ]
        },
        ...
    ]
    

    我想用Lodash检查是否有任何物品的价格是“英镑”货币,所以我写了如下:

    _.some(products, ['prices.currency', 'GBP'])
    

    但是,它总是返回 false .

    我猜它不能 prices.currency 财产自 prices 是一个对象数组,因此Lodash不知道要检查哪些对象。我知道我可以做些 prices[0].currency ,但它只能在这种情况下工作,即英镑是第一个价格。

    是否有一种“通配符”来表示“任何数组项”(比如 prices[x].currency ),或者我需要先提取内部对象,然后使用 _.some(xxx) ?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Koushik Chatterjee    6 年前

    你也可以不用洛达斯 Array#some :

    let result = data.some(e => e.prices.some(p => p.currency == 'GBP'));
    console.log(result);
    

    演示:

    const data = [
        {
            "name": "productA",
            "prices": [
                {
                    "currency": "USD",
                    "price": 10.0
                },
                {
                    "currency": "EUR",
                    "price": 9.0
                }
            ]
        },
        {
            "name": "productB",
            "prices": [
                {
                    "currency": "GBP",
                    "price": 18.0
                },
                {
                    "currency": "EUR",
                    "price": 20.0
                }
            ]
        }
    ];
    
    let result = data.some(e => e.prices.some(p => p.currency == 'GBP'));
    console.log(result);