[英]Mapping an array to a object with lodash
我有这个数组:
[ [ '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轻松完成此操作:
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);
您可以使用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>
您可以这样做:
const trans = data[0].map((col, i) => data.map(row => row[i]));
_.zipObject(['T', 'O', 'H', 'L', 'C'], trans)
数据是您的初始数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.