Lodash: преобразовать массив в angularjs nvd3 Multibarchart - PullRequest
0 голосов
/ 01 октября 2018

Я хочу преобразовать мой apiArray, полученный из api, в формат данных MultiularBarChart AngularJS NVD3.

$scope.apiArray = [{"date":"2018-07-05T05:05:39.732Z","id":2"count":1},{"date":"2018-07-05T05:05:39.732Z","id": 3,"count": 1},"date": "2018-07-06T05:05:39.732Z","id": 2,"count": 1}, {"date": "2018-07-06T05:05:39.732Z","id": 4,"count": 2}

Используя библиотеку Lodash, где ключом является мой идентификатор, в ->

$scope.data = [{"key":"2", "values":[{"date": "2018-07-05T05:05:39.732Z", "count": "1"},{"date": "2018-07-06T05:05:39.732Z", "count": "1"}]},{"key":"3", "values":[{"date": "2018-07-05T05:05:39.732Z", "count": "1"}]},{"key":"4", "values":[{"date": "2018-07-06T05:05:39.732Z", "count": "2"}]}]

Isесть ли решение?Я хочу передать свой apiArray в AngularJS NVD3 для создания мультибаровой диаграммы.

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Вы можете просто использовать _.groupBy с _.map, чтобы получить это

_(data).groupBy('id').map((values, key) => ({key, values})).value()

  1. Сначала сгруппированные по 'id', он вернет объектгде ключи будут уникальными идентификаторами, а каждое значение будет массивом, содержащим все объекты, имеющие этот идентификатор
  2. . Затем сопоставьте его (каждый ключ / значение) с объектом, имеющим ключ key and values, ключ будет содержать уникальный идентификатор изначениями будут объекты, имеющие этот идентификатор (то, что мы получаем в _.groupBy для каждого уникального идентификатора, просто используйте это)

var data = [{ "date": "2018-07-05T05:05:39.732Z", "id": 2, "count": 1 }, { "date": "2018-07-05T05:05:39.732Z", "id": 3, "count": 1, }, { "date": "2018-07-06T05:05:39.732Z", "id": 2, "count": 1 }, { "date": "2018-07-06T05:05:39.732Z", "id": 4, "count": 2 } ];

var res = _(data)
          .groupBy('id')
          .map((values, key) => ({ key, values}))
          .value();
          
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
0 голосов
/ 01 октября 2018

Это должно помочь вам:

var data = [{ "date": "2018-07-05T05:05:39.732Z", "id": 2, "count": 1 }, { "date": "2018-07-05T05:05:39.732Z", "id": 3, "count": 1, }, { "date": "2018-07-06T05:05:39.732Z", "id": 2, "count": 1 }, { "date": "2018-07-06T05:05:39.732Z", "id": 4, "count": 2 } ]

const result = _(data)
   .groupBy(x => x.id)
   .entries()
   .map(x => ({ key: x[0], values: x[1]}))
   .value()
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>

Мы используем цепочку, затем группируем (через groupBy ) идентификатор, затем используем записи , чтобы получитьсодержимое в виде массива, а затем просто сопоставьте с ожидаемым результатом объекта.

...