Вложенные массивы с объектами, loda sh meanBy - PullRequest
0 голосов
/ 20 января 2020

Может кто-нибудь, пожалуйста, помогите мне понять, как сделать эту работу. Каждый раз, когда я чувствую, что начинаю понимать массивы и объекты в Javascript, получается, что я до сих пор не понимаю.

Я пытаюсь получить среднее значение всех цен в следующей структуре данных, используя loda sh 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" },
    ]
  }
]

Если вы предоставите ответ, вы также можете попробовать объяснить, как вы выбираете что-то, вложенное в предметы, потому что это так далеко, как я получаю, прежде чем я потеряюсь.

1 Ответ

1 голос
/ 20 января 2020

В этом случае вместо выбора вложенных значений проще упростить элементы до одного массива, а затем применить _.meanBy(). Кроме того, цены являются строками, а не числами, поэтому вам необходимо преобразовать их.

Свести items в один массив с Array.flatMap(), а затем использовать _.meanBy() и получить цифры c значения цен:

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>
...