在node.js中组合对象

时间:2017-11-09 07:21:39

标签: javascript node.js stream

我的node.js应用程序从外部API接收两个json对象。第一个对象是按天为unix时间戳的天数数据:

{
  1491368400: /*some data*/,
  1491454800: /*some data*/,
  1491541200: /*some data*/,
}

第二个对象是这些天的天气数(如果上面的对象有三天,则此对象中有3 * 24个键):

{
  1491368400: /*some data*/,
  1491372000: /*some data*/,
  1491375600: /*some data*/,
  .............................
  /* there are 72 keys, 24 for every proper day from object above */
}

我需要组合这两个对象:从第二个对象获取数据小时,并计算第一个对象每天的平均值,并将这些值放入第一个对象。 我认为使用Transform Stream做这件事会很好,但不知道如何正确地做到这一点。我只需要一个架构如何做,而不是详细的解决方案。

更新

我想知道的主要问题是如何在不对事件循环施加太大压力的情况下合并两个对象。

3 个答案:

答案 0 :(得分:0)

如果您可以假设每天总共有24个数据点,则可以使用Object.keys()获取日期和时间的时间戳数组并对其进行排序。然后,您可以将第一天时间戳与前24小时时间戳匹配,第二天与第二组24小时时间戳匹配,等等。

由于您要求提供方向而非代码,我将其余部分留给您。如果您需要更多,请不要犹豫,我会编辑答案。

答案 1 :(得分:0)

Object.assign()

可以用于此。它将所有参数对象合并到第一个参数。如果您不想修改起始对象,请执行以下操作:

Object.assign({}, obj1, obj2);

答案 2 :(得分:0)

组合对象

如果您使用es5,Object.assign({}, obj1, obj2);

或者您使用es6或更高标准,使用spread运算符来组合您的对象

const obj1 = { a: 1 }; const obj2 = { b: 2 }; const data = { ...obj1, ...obj2 };

// Now data value is { a: 1, b: 2 } 
// if keys are same , obj2 override obj1 value` 

使用三点(...)来展开你的属性。