【问题标题】:How to convert object structure nodeJS如何转换对象结构nodeJS
【发布时间】:2020-03-24 18:07:39
【问题描述】:

我有一个包含 n 个成员的对象,如下所示:

 {
  open: '122.31000000',
  high: '137.50000000',
  low: '119.50000000',
  close: '135.92000000',
  volume: '1436796.12449000',
  closeTime: 1585007999999,
} 
{
  open: '132.63000000',
  high: '137.13000000',
  low: '121.10000000',
  close: '122.32000000',
  volume: '1055699.86532000',
  closeTime: 1584921599999,
}

我想在不使用任何 for 循环的情况下像这样转换这个对象,我该怎么做?

{  
  o: '122.31000000',
  h: '137.50000000',
  l: '119.50000000',
  c: '135.92000000',
  v: '1436796.12449000',
  d: 1585007999999
},
{
  o: '132.63000000',
  h: '137.13000000',
  l: '121.10000000',
  c: '122.32000000',
  v: '1055699.86532000'
  d: '1584921599999'
}

【问题讨论】:

  • 您是否遵循任何模式来重命名对象键?我不明白使用 d 来表示 closeTime?你能解释一下吗?
  • 为什么要避免循环?你知道如何使用 循环吗?如果是,请发布您将使用的代码,以便我们提出等效的替代方案。
  • @Bergi "不使用任何 for 循环" ;)
  • 是的,我知道如何使用 for 循环我可以使用 for 循环分配一个值之一,但代码性能正在下降
  • 如果没有循环,您将无法实现您想要的。(map、forEach、for ...等)。实际上,您想更改大量对象,而不是单个对象。

标签: javascript arrays node.js object


【解决方案1】:

您将不得不使用某种循环。一种选择是您可以使用带有解构的地图。

 const data = [{
  open: '122.31000000',
  high: '137.50000000',
  low: '119.50000000',
  close: '135.92000000',
  volume: '1436796.12449000',
  closeTime: 1585007999999,
},
{
  open: '132.63000000',
  high: '137.13000000',
  low: '121.10000000',
  close: '122.32000000',
  volume: '1055699.86532000',
  closeTime: 1584921599999,
}]

const updated = data.map(({open: o, high: h, low: l, close: c, volume: v, closeTime: d}) => ({o, h, l, c, v, d}))

console.log(updated)

【讨论】:

    【解决方案2】:

    for 循环没有任何问题,但您可以使用其他技术来做到这一点。请注意,这根本不会提高性能,因为您仍然在技术上循环遍历每个项目并为每个项目构建一个新对象。

    const propertyRenaming = {
      open: 'o',
      high: 'h',
      low: 'l',
      close: 'c',
      volume: 'v',
      closeTime: 'd'
    };
    
    const transformed = data.map(obj => 
      Object.entries(data).reduce((result, [prop, value]) => 
        Object.assign(result, { [propertyRenaming[prop]]: value }), 
        {}
      )
    );
    

    【讨论】:

      【解决方案3】:

      您可以使用.map()Object.keys() 转换为您的预期结果。

      const data = [{ open: '122.31000000', high: '137.50000000', low: '119.50000000', close: '135.92000000', volume: '1436796.12449000', closeTime: 1585007999999, }, { open: '132.63000000', high: '137.13000000', low: '121.10000000', close: '122.32000000', volume: '1055699.86532000', closeTime: 1584921599999, }];
      
      const result = data.map(e => 
        Object.keys(e).reduce((a, c) => {
          if (c === 'closeTime') a['d'] = e[c];
          else a[c[0]] = e[c];
          return a;
        }, {})
      );
      
      console.log(result);

      我希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-20
        • 1970-01-01
        • 2015-04-27
        • 1970-01-01
        • 2021-03-10
        • 1970-01-01
        相关资源
        最近更新 更多