簡體   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