1

我想将从 api 获取的 apiArray 转换为 AngularJS NVD3 MultiBarChart 数据格式。

$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 库,其中 key 是我的 id,到 ->

$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"}]}]

有什么解决办法吗?我想将我的 apiArray 提供给 AngularJS NVD3 以创建 Multibar 图表。

4

2 回答 2

0

这应该可以帮助您:

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)id 进行分组,然后使用条目以数组形式获取内容,然后映射到预期的对象结果。

于 2018-10-01T17:09:01.650 回答
0

你可以简单地使用 a_.groupBy_.map实现这一点

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

  1. 首先按 分组'id',它将返回一个对象,其中键将是唯一的 id,每个值将是一个数组,其中包含具有该 id 的所有对象
  2. 然后将它(每个键/值)映射到具有 key 的对象key and values,键将包含唯一 id,值将是具有该 id 的对象(我们_.groupBy针对每个唯一 id 获取的内容,简单使用)

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>

于 2018-10-01T17:42:35.540 回答