【问题标题】:Combine objects in node.js在 node.js 中组合对象
【发布时间】:2017-11-09 18:22:38
【问题描述】:

我的 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 来做会很好,但不知道如何正确地做。我只需要一个模式如何做到这一点,而不是详细的解决方案。

更新

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

【问题讨论】:

  • 转换流??只有“两个”对象不是吗?流在哪里?
  • @NeilLunn 如果我对解决方案有误,在这种情况下最好的工具是什么?
  • 只是想澄清一下,你只是告诉我们一些你用谷歌搜索但并不真正知道它是什么的花哨的东西。我们可以从您的问题中删除“流”标签,因为它实际上与流无关?
  • @NeilLunn 这些对象是从 API 接收的,也许 Stean 是异步合并这些对象的好工具?
  • @NeilLunn 我想异步合并它们,因为每小时对象中有相当多的数据,我想逐小时异步合并它们。

标签: javascript node.js stream


【解决方案1】:
Object.assign()

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

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

【讨论】:

    【解决方案2】:

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

    由于您要求的是方向而不是代码,剩下的就交给您了。如果您需要更多信息,请随时提出,我会修改答案。

    【讨论】:

    • 很抱歉没有提供更多细节,但我更感兴趣的是如何在不对事件循环施加压力的情况下异步合并两个对象。首先我需要修改每个对象,然后我需要合并它们。你能举例说明如何正确地做到这一点吗?也许 Stream Transform 对此有好处?
    【解决方案3】:

    组合对象

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

    或者你使用 es6 或以上标准,使用扩展运算符来组合你的对象

    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` 
    

    使用三点 (...) 来扩展您的属性。

    【讨论】:

      猜你喜欢
      • 2018-07-31
      • 2017-09-02
      • 2019-06-13
      • 2022-08-02
      • 2016-06-30
      • 1970-01-01
      • 2014-02-22
      • 2020-07-26
      • 2020-01-03
      相关资源
      最近更新 更多