将值数组展开为不同的类别

时间:2018-05-29 17:17:30

标签: javascript arrays json d3.js dimple.js

我有一个来自sharepoint表的JSON对象(数组),我需要对行进行重组,但有点挣扎(我在JS中相当初学者)。

我有这样的事情:

   [{'ID':'1', 'Title': 'First record', 'blue':'3', 'red':'6', 'yellow':'2'},
    {'ID':'2', 'Title': 'Second record', 'blue':'1', 'red':'3', 'yellow':'6'}]

我需要将其转换为:

   [{'ID':'1', 'Title': 'First record', 'category':'blue', 'count':'3'},

    {'ID':'1', 'Title': 'First record', 'category':'red', 'count':'6'},

    {'ID':'1', 'Title': 'First record', 'category':'yellow', 'count':'2'},

    {'ID':'2', 'Title': 'Second record', 'category':'blue', 'count':'1'},

    {'ID':'2', 'Title': 'Second record', 'category':'red', 'count':'3'},

    {'ID':'2', 'Title': 'Second record', 'category':'yellow', 'count':'6'}]

我想要实现的目标:

  1. 创建单独的行以“展开”三个类别字段(蓝色,红色,黄色),因此一行变为三行
  2. 保留每个新创建的行(ID,标题)中的其他字段
  3. 我正在尝试重新格式化这些数据,以便我可以将数组输入到Dimple / D3图表中,以创建一个分类图表,显示每个类别的值计数。

    我尝试为...做每个循环和循环内部的循环和我发现的示例中的_.map,但没有得到我之后的输出(在浏览器中调试很痛苦,所以不知道在哪里代码对我失败:/)。你是否会如此善良地展示一个如何正确操作这个操作的例子(可能是Underscore的.chain .each和.map)?最好没有箭头功能(我需要在IE11中使用)。

    提前谢谢!

1 个答案:

答案 0 :(得分:0)

可以通过重建新的对象集合来完成;这是一个示例;

var myData = JSON.parse('JsonString');
var transformedData = [];
myData.forEach(function(data){
    transformedData.push({ ID: data.ID, Title: data.Title, category: "blue", count = data.blue });
    transformedData.push({ ID: data.ID, Title: data.Title, category: "red", count = data.red });
    transformedData.push({ ID: data.ID, Title: data.Title, category: "yellow", count = data.yellow });
});
var transformedJson = JSON.stringify(transformedData);

记住JSON名称应使用双引号"而不是单引号'