使用ES6将数据从一种形式转换为另一种形式

时间:2017-09-27 12:30:02

标签: javascript underscore.js es6-modules

我的数据如下:

?latlng=[latitude,longitude]&key=[your_gmap_api_key]

我想将上述数据转换为:

[
  {
    name: "ABC",
    points: [
      {
        timestamp: "2017/09/26",
        value: 1
      },
      {
        timestamp: "2017/09/27",
        value: 2
      },
    ]
  },
  {
    name: "DEF",
    points: [
      {
        timestamp: "2017/09/26",
        value: 0
      },
      {
        timestamp: "2017/09/27",
        value: 3
      },
    ]
  }
]

我刚开始学习ES6并强调。试图应用下划线来转换,但不能成功。

2 个答案:

答案 0 :(得分:0)

您可以通过以下方式执行此操作



let arr = [
  {
    name: "ABC",
    points: [
      {
        timestamp: "2017/09/26",
        value: 1
      },
      {
        timestamp: "2017/09/27",
        value: 2
      },
    ]
  },
  {
    name: "DEF",
    points: [
      {
        timestamp: "2017/09/26",
        value: 0
      },
      {
        timestamp: "2017/09/27",
        value: 3
      },
    ]
  }
]

let result = arr.reduce((a, b) => {
    for(let element of b.points){
        a[element.timestamp] = a[element.timestamp] || {};
        let newObj = {};
        newObj[b.name] = element.value;
        Object.assign(a[element.timestamp], newObj);
    }
    return a;
}, {});


result = Object.keys(result).map(key => Object.assign(result[key], {timestamp : key}));
console.log(result);




答案 1 :(得分:0)

由于您没有共同努力,我将把这个答案集中在算法上,并将实现部分留给您。

算法:

  • 创建一个将存储组的哈希映射。
  • 一个群组将有一个签名{ name: valueAsPerDate}
  • 现在循环数据。对于每个物体,
    • 在hashmap中搜索当前日期。如果存在,请添加具有必要vallue的组。
    • 如果没有,请将其添加到散列图,然后将组值添加到其中。
    • 一旦上面的循环结束,再次遍历hashmap并返回格式的对象,其中timestamp将是你的组名,你已经拥有该对象的值。

的Ta-DA !!!