![](/img/trans.png)
[英]Object from comprehension in CoffeeScript [dict/hash comprehensions]
[英]CoffeeScript - transform object into a matrix using comprehensions
我有一个 object 的形式: {a: [1,2,3,4], b: [5,6,7,8]}
我想使用理解将它转换为一个 arrays 的数组 3项目:
[
['a', 0, 1], ['a', 1, 2], ['a', 2, 3], ['a', 3, 4],
['b', 0, 5], ['b', 1, 6], ['b', 2, 7], ['b', 3, 8]
]
我试过这个( [x,y,v] for v, y in h for x, h of obj )
但它给出了一个包含 4 个元素的两个元素的数组:
[
[ [], [], [], [] ],
[ [], [], [], [] ]
]
如何跳过第二级的数组?
当您拆分两个推导时,更容易看到:
result = for x, h of obj
for v, y in h
[x,y,v]
您的结果将是 2 级深,因为每个理解都返回一个数组。
第一个深度数组将为 object 中的每个元素提供一个数组。
这些 arrays 中的每一个都将包含 object 中一个键的结果
解决此问题的最佳方法是将您想要的 3 个元素 arrays 中的每一个推入一个单独的数组中。
result = []
for x, h of obj
for v, y in h
result.push [x,y,v]
或者使用紧凑格式:
result = []
result.push [x,y,v] for v, y in h for x, h of obj
如果您已经拥有像lodash这样的实用程序库,则可以使用flatten
方法。 但这将涉及对您的 arrays 的另一次迭代,因此如果性能很重要并且您拥有非常大的数据集,则不实用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.