首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将json数据按特定格式分组

将json数据按特定格式分组
EN

Stack Overflow用户
提问于 2016-05-27 15:08:21
回答 2查看 48关注 0票数 0

我的基本数据如下..

代码语言:javascript
复制
 [{
        month: 'Jan',
        cat: 'A',
        val: 20
    },{
        month: 'Jan',
        cat: 'B','
        val: 5
    },{
        month: 'Jan',
        cat: 'C',
        val: 10
    },{
        month: 'Feb',
        cat: 'A',
        val: 30
    },{
        month: 'Feb',
        cat: 'B',
        val: 10
    },{
        month: 'Feb',
        cat: 'C',
        val: 20
    }];

我需要用javascript把它转换成下面的格式,最好是存档。

代码语言:javascript
复制
 [{
        selectedmonth: 'Jan',
        data:[{
        mycat: 'A',
        myval: 20
    },{
        mycat: 'B',
        myval: 5
    },{
        mycat: 'C',
        myval: 10
    }
       ]
    }, {
        selectedmonth: 'Feb',
        data:[{
        mycat: 'A',
        myval: 30
    },{
        mycat: 'B',
        myval: 10
    },{
        mycat: 'C',
        myval: 20
    }
       ]
    }]

我知道一个月一个月的房客组会给这个组打电话,但它是以不同的方式进行的。

任何帮助都是衷心感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-27 15:15:17

可以将对象用作对结果数组的引用的哈希表。

代码语言:javascript
复制
var array = [{ month: 'Jan', cat: 'A', val: 20 }, { month: 'Jan', cat: 'B', val: 5 }, { month: 'Jan', cat: 'C', val: 10 }, { month: 'Feb', cat: 'A', val: 30 }, { month: 'Feb', cat: 'B', val: 10 }, { month: 'Feb', cat: 'C', val: 20 }],
    grouped = [];

array.forEach(function (a) {
    if (!this[a.month]) {
        this[a.month] = { selectedmonth: a.month, data: [] };
        grouped.push(this[a.month]);
    }
    this[a.month].data.push({ mycat: a.cat, myval: a.val });

}, Object.create(null));

console.log(grouped);

票数 2
EN

Stack Overflow用户

发布于 2016-05-27 16:12:11

如果您使用的是lodash,则可以使用groupBy()month对项进行分组,然后使用地图()根据您的标准转换项目。

代码语言:javascript
复制
var result = _(collection)
  .map(v => _.mapKeys(v, (v, k) => 'my' + k))
  .groupBy('mymonth')
  .map((data, selectedmonth) => ({
    selectedmonth,
    data: _.map(data, item => _.omit(item, 'mymonth'))
  })).value();

代码语言:javascript
复制
var collection = [{
  month: 'Jan',
  cat: 'A',
  val: 20
}, {
  month: 'Jan',
  cat: 'B',
  val: 5
}, {
  month: 'Jan',
  cat: 'C',
  val: 10
}, {
  month: 'Feb',
  cat: 'A',
  val: 30
}, {
  month: 'Feb',
  cat: 'B',
  val: 10
}, {
  month: 'Feb',
  cat: 'C',
  val: 20
}];

var result = _(collection)
  .map(v => _.mapKeys(v, (v, k) => 'my' + k))
  .groupBy('mymonth')
  .map((data, selectedmonth) => ({
    selectedmonth,
    data: _.map(data, item => _.omit(item, 'mymonth'))
  })).value();

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.js"></script>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37486823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档