簡體   English   中英

如果使用 lodash 迭代 object,這是一種更好的方法

[英]a better way if iterating an object using lodash

使用 lodash 我想知道是否有更好的方法來做到這一點。

我有一個數組 object,如下所示。

    {
        "ALFA ROMEO": {
            "MITO": [{
                "carData": "stuff"
            }]
        },
        "AUDI": {
            "A1": [{
                    "carData": "stuff"
                },
                {
                    "carData": "stuff"
                }
            ],
            "Q3": [{
                "carData": "stuff"
            }],
            "A3": [{
                    "carData": "stuff"
                },
                {
                    "carData": "stuff"
                },
                {
                    "carData": "stuff"
                }
            ]
        }
    }

我正在使用 _.forEach 遍歷 object 來構建與此類似的 output:

    ALFA ROMEO - 1
        MITO (1)
    AUDI - 5
        A1 (2)
        Q3 (1)
        A3 (2)

使用這個我可以到達那里:

        _.forEach(jData, (val, key) => {
            console.log(key)
            _.forEach(val, (val, key) => {
                console.log('    ' + key + ' (' + val.length + ')')
            })
        })

這給我這個:

    ALFA ROMEO
        MITO (1)
    AUDI
        A1 (2)
        Q3 (1)
        A3 (2)

我的問題是:

a) 有沒有沒有雙循環的更好方法?

b) 是通過將 model 計數相加來獲得每個品牌的總數的唯一方法,還是有更好的方法?

謝謝。

沒有嵌套循環就無法做到這一點,因為您需要打印每個 model。

您可以使用_.sumBy()來獲取模型的總長度,這樣您就可以在循環之前顯示它。

 const jData = { "ALFA ROMEO": { "MITO": [{ "carData": "stuff" }] }, "AUDI": { "A1": [{ "carData": "stuff" }, { "carData": "stuff" } ], "Q3": [{ "carData": "stuff" }], "A3": [{ "carData": "stuff" }, { "carData": "stuff" }, { "carData": "stuff" } ] } }; _.forEach(jData, (val, key) => { let total = _.sumBy(_.toArray(val), 'length'); console.log(`${key} - ${total}`) _.forEach(val, (val, key) => { console.log(`${key} (${val.length})`) }) })
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM