将 json 响应转换为表

雅库布

我正在尝试将 json 响应转换为接受我的表的数组(来自 devextreme 的组件)。我正在尝试在 angular 6 上做到这一点。 Json 看起来像这样:

"data": [
            {
                "type": "A",
                "date": "2018-05",
                "value": "153"
            },
            {
                "type": "B",
                "date": "2018-05",
                "value": "888"
            },
            {
                "type": "C",
                "date": "2018-05",
                "value": "999"
            },
            {
                "type": "D",
                "date": "2018-05",
                "value": "555"
            },
            {
                "type": "A",
                "date": "2018-06",
                "value": "148"
            },
            {
                "type": "B",
                "date": "2018-06",
                "value": "222"
            },
            {
                "type": "C",
                "date": "2018-06",
                "value": "555"
            },
            {
                "type": "D",
                "date": "2018-06",
                "value": "666"
            },
            {
                "type": "A",
                "date": "2018-07",
                "value": "156"
            },
            {
                "type": "B",
                "date": "2018-07",
                "value": "111"
            },
            {
                "type": "C",
                "date": "2018-07",
                "value": "333"
            },
            {
                "type": "D",
                "date": "2018-07",
                "value": "999"
            }
],
        "number": "111-111"
   }
]

我需要将其转换为这种格式:

[{
    month: '2018-05',
    A: 153,
    B: 888,
    C: 999,
    D: 555
  },
  {
    month: '2018-06',
    A: 148,
    B: 222,
    C: 555,
    D: 666
  },
  {
    month: '2018-07',
    A: 156,
    B: 111,
    C: 333,
    D: 999
  }]

类型的数量可以改变(例如,可能只有 A 和 B)。有人可以帮我吗?我正在使用此组件在网站https://js.devexpress.com/Demos/WidgetsGallery/Demo/DataGrid/SimpleArray/Angular/Light/上显示数据

wentjun

这就是我将如何解决您的问题:

1) 从您的数据源中获取类型和日期列表。我们使用 JavaScript 的Set来存储值,以便这些值是唯一的(没有重复)。

from 的值date将被视为结果数组中每个对象的唯一键,并且type将是结果的其他属性('A'、'B'、'C' 和 'D')

2) 一旦我们有了这 2 个数组,我们将遍历原始列表以生成对象。属性值 、ABC的值D是通过从原始 中过滤date填充的typelist

const list = {"data":[{"type":"A","date":"2018-05","value":"153"},{"type":"B","date":"2018-05","value":"888"},{"type":"C","date":"2018-05","value":"999"},{"type":"D","date":"2018-05","value":"555"},{"type":"A","date":"2018-06","value":"148"},{"type":"B","date":"2018-06","value":"222"},{"type":"C","date":"2018-06","value":"555"},{"type":"D","date":"2018-06","value":"666"},{"type":"A","date":"2018-07","value":"156"},{"type":"B","date":"2018-07","value":"111"},{"type":"C","date":"2018-07","value":"333"},{"type":"D","date":"2018-07","value":"999"}],"number":"111-111"};

// const dates = [...new Set(list.data.map(item => item.date))];
const dates = Array.from(list.data.map(item => item.date));
console.log(dates);

// const types = [...new Set(list.data.map(item => item.type))];
const types = Array.from(list.data.map(item => item.type));
console.log(types)
 
const res = dates.map(date => {
  const obj = {};
  types.map(type => {
    obj[type] = list.data.filter(item => item.date === date && item.type === type)[0].value;
  });
  obj.date = date;
  return obj;
});
console.log(res);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章