【问题标题】:Nested arrays with objects, lodash meanBy带有对象的嵌套数组,lodash meanBy
【发布时间】:2020-01-20 14:31:21
【问题描述】:

有人可以帮助我了解如何进行这项工作。每次我觉得我开始理解 Javascript 中的数组和对象时,结果证明我仍然没有。

我正在尝试使用 lodash meanBy 获取以下数据结构中所有价格的平均值

[
  {
    date: "2019-12-17",
    items: [
      { id: "1", state: "accepted", price: "90.5" },
      { id: "2", state: "rejected", price: "20.0" },
      { id: "3", state: "open", price: "10.5" },
    ]
  },
  {
    date: "2019-12-18",
    items: [
      { id: "4", state: "open", price: "450.0" },
      { id: "5", state: "rejected", price: "40.1" },
      { id: "6", state: "accepted", price: "50.9" },
    ]
  }
]

如果您提供了答案,您能否也请尝试解释一下您如何选择嵌套在项目中的东西,因为这是我迷路之前所能得到的。

【问题讨论】:

    标签: javascript arrays object nested lodash


    【解决方案1】:

    在这种情况下,与其选择嵌套值,不如将项目展平为单个数组,然后应用_.meanBy()。此外,价格是字符串,而不是数字,因此您需要对其进行转换。

    Array.flatMap()items扁平化为一个数组,然后用_.meanBy(),得到价格的数值:

    const data = [{"date":"2019-12-17","items":[{"id":"1","state":"accepted","price":"90.5"},{"id":"2","state":"rejected","price":"20.0"},{"id":"3","state":"open","price":"10.5"}]},{"date":"2019-12-18","items":[{"id":"4","state":"open","price":"450.0"},{"id":"5","state":"rejected","price":"40.1"},{"id":"6","state":"accepted","price":"50.9"}]}]
    
    const result = _.meanBy(_.flatMap(data, 'items'), o => +o.price)
    
    console.log(result)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>

    另一种方法是获取一般平均值,通过分别获取每个items数组的平均值,然后获取所有平均值的平均值。

    const data = [{"date":"2019-12-17","items":[{"id":"1","state":"accepted","price":"90.5"},{"id":"2","state":"rejected","price":"20.0"},{"id":"3","state":"open","price":"10.5"}]},{"date":"2019-12-18","items":[{"id":"4","state":"open","price":"450.0"},{"id":"5","state":"rejected","price":"40.1"},{"id":"6","state":"accepted","price":"50.9"}]}]
    
    const result = _.meanBy(data, ({ items }) => _.meanBy(items, o => +o.price))
    
    console.log(result)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>

    【讨论】:

    • 感谢您在帖子中的澄清。我还想问一下您将字符串转换为数字的确切位置。我已经查看了几次代码,但我看不到它。 o => +o.price中的“+”还有什么作用@
    • 不客气。一元 + 将字符串转换为数字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多