如果使用 lodash 迭代对象,这是一种更好的方法

a better way if iterating an object using lodash

使用 lodash 我想知道是否有更好的方法。

我有一个如下所示的数组对象。

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

我正在使用 _.forEach 遍历对象来构建与此类似的输出:

    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) 是通过合计模型计数来获得每个品牌总数的唯一方法,还是有更好的方法?

谢谢。

没有嵌套循环就无法做到这一点,因为您需要打印每个模型。

您可以使用 _.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>