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)
根据您的环境,您还可以使用对象获取密钥。密钥(数据)