Coffeescript 从列表理解创建两个数组

Coffeescript 从列表理解创建两个数组,coffeescript,list-comprehension,Coffeescript,List Comprehension,现在,我在《咖啡脚本》中这样做: keys = (key for key of data) values = (v for k,v of data) 其中,数据是一个对象(不是数组)。我试图创建两个数组,其中键是一个属性名数组,值是一个值数组 这将编译为: var键、值; keys=(函数(){ var_结果; _结果=[]; 用于(输入数据){ _结果:按键; } 返回结果; })(); 值=(函数(){ var_结果; _结果=[]; 用于(数据中的k){ v=数据[k]; _结果:推(v

现在,我在《咖啡脚本》中这样做:

keys = (key for key of data)
values = (v for k,v of data)
其中,
数据
是一个对象(不是数组)。我试图创建两个数组,其中键是一个属性名数组,值是一个值数组

这将编译为:

var键、值;
keys=(函数(){
var_结果;
_结果=[];
用于(输入数据){
_结果:按键;
}
返回结果;
})();
值=(函数(){
var_结果;
_结果=[];
用于(数据中的k){
v=数据[k];
_结果:推(v);
}
返回结果;
})();
我希望能够将这两个循环组合成一个循环,但不知道如何(或者是否可能)使用列表理解来实现这一点

我所做的另一个尝试是创建两个数组,并亲自将项目推送到它们:

keys = []
values = []
keys.push k for k,v of data
这让我可以很好地按下键,但我无法理解将键推到
值的语法


如何从一个列表创建两个数组?我自己编写循环是否更好?

我认为最简单的方法是自己循环:

keys = []
values = []
for key, value of data
   keys.push key
   values.push value
哪一个是透明的

var key, keys, value, values;

keys = [];

values = [];

for (key in data) {
  value = data[key];
  keys.push(key);
  values.push(value);
}
如果不使用外部库,则可能是最简单的,但如果您已经在使用下划线,则可以生成
[key,value]
数组的数组,然后将它们组合在一起:

[keys, values] = _.zip ([k, v] for k, v of data)...

splats的用法与执行
.zip.apply(k,[k,v]表示数据的k,v)

根据您的环境,您还可以使用
对象获取密钥。密钥(数据)