CoffeeScript - 使用理解将对象转换为矩阵
CoffeeScript - transform object into a matrix using comprehensions
我有一个形式为 {a: [1,2,3,4], b: [5,6,7,8]}
的对象,我想使用推导式将其转换为包含 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 层深,因为每个理解都返回一个数组。
第一个深度数组将为对象中的每个元素创建一个数组。
这些数组中的每一个都将包含对象中一个键的结果
解决此问题的最佳方法是将所需的 3 个元素数组中的每一个都推送到一个单独的数组中。
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, you could use the flatten
方法这样的实用程序库。但这将涉及对数组的另一次迭代,因此如果性能很重要并且您有非常大的数据集,则不切实际
我有一个形式为 {a: [1,2,3,4], b: [5,6,7,8]}
的对象,我想使用推导式将其转换为包含 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 层深,因为每个理解都返回一个数组。
第一个深度数组将为对象中的每个元素创建一个数组。
这些数组中的每一个都将包含对象中一个键的结果
解决此问题的最佳方法是将所需的 3 个元素数组中的每一个都推送到一个单独的数组中。
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, you could use the flatten
方法这样的实用程序库。但这将涉及对数组的另一次迭代,因此如果性能很重要并且您有非常大的数据集,则不切实际