【问题标题】:Mapping an array to a object with lodash使用 lodash 将数组映射到对象
【发布时间】:2018-11-08 15:40:05
【问题描述】:

我有这个数组:

[ [ '2018-05-28T21:51:00Z',
    0.00000858,
    0.00000857,
    0.00000860,
    0.00000855,
    12511.81490226 ],
  [ '2018-05-28T21:52:00Z',
    0.00000853,
    0.00000850,
    0.00000856,
    0.00000847,
    12687.20140187 ],
  [ '2018-05-28T21:53:00Z',
    0.00000848,
    0.00000847,
    0.00000850,
    0.00000846,
    12708.9320888 ]
]

我需要把它改成这样:

{ 
    T: [ '2018-05-28T21:51:00Z', '2018-05-28T21:52:00Z', '2018-05-28T21:53:00Z' ],
    O: [ 0.00000858, 0.00000853, 0.00000848],
    C: [ 0.00000857, 0.00000850, 0.00000847],
    H: [ 0.00000860, 0.00000856, 0.00000850],
    L: [ 0.00000855, 0.00000847, 0.00000846],
    V: [ 12511.81490226, 12687.20140187, 12708.9320888 ]
}

这是预定义的位置,第一个值总是'T',第二个值总是'O'等等。

像这样尝试使用 lodash

_.zipObject(['T', 'O', 'H', 'L', 'C'], s.values) 

但结果并非预期。有什么建议吗?

【问题讨论】:

    标签: javascript arrays node.js lodash


    【解决方案1】:

    不需要库,您可以使用纯 Javascript 轻松完成此操作:

    const input=[['2018-05-28T21:51:00Z',0.00000858,0.00000857,0.00000860,0.00000855,12511.81490226],['2018-05-28T21:52:00Z',0.00000853,0.00000850,0.00000856,0.00000847,12687.20140187],['2018-05-28T21:53:00Z',0.00000848,0.00000847,0.00000850,0.00000846,12708.9320888]]
    const keys = ['T', 'O', 'C', 'H', 'L', 'V'];
    const arrs = input.reduce((accum, item) => {
      keys.forEach((key, i) => accum[key].push(item[i]));
      return accum;
    }, keys.reduce((a, key) => { a[key] = []; return a }, {}));
    console.log(arrs);

    【讨论】:

      【解决方案2】:

      您可以这样做:

      const trans  = data[0].map((col, i) => data.map(row => row[i]));
      
      _.zipObject(['T', 'O', 'H', 'L', 'C'], trans) 
      

      data 是您的初始数组。

      【讨论】:

        【解决方案3】:

        您只需使用 zip 和 zipobject 即可:

        var input = [ [ '2018-05-28T21:51:00Z',
            0.00000858,
            0.00000857,
            0.00000860,
            0.00000855,
            12511.81490226 ],
          [ '2018-05-28T21:52:00Z',
            0.00000853,
            0.00000850,
            0.00000856,
            0.00000847,
            12687.20140187 ],
          [ '2018-05-28T21:53:00Z',
            0.00000848,
            0.00000847,
            0.00000850,
            0.00000846,
            12708.9320888 ]
        ];
        
        var output = _.zipObject(['T', 'O', 'H', 'L', 'C'], _.zip.apply(_, input));
        <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/1.2.1/lodash.min.js"></script>

        【讨论】:

          猜你喜欢
          • 2016-05-31
          • 1970-01-01
          • 1970-01-01
          • 2022-11-24
          • 1970-01-01
          • 2017-02-08
          • 1970-01-01
          • 2021-04-18
          • 1970-01-01
          相关资源
          最近更新 更多