繁体   English   中英

CoffeeScript - 使用推导将 object 转换为矩阵

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM