>我有以下格式的数据:
data = {
car1: {
starting_position: 1,
...
},
car5: {
starting_position: 2,
...
}
}
我想创建一个对象,其中starting_position
成为键,原始data
中的键成为值。我可以这样做:
byStartingPosition = {}
for k, properties of data
byStartingPosition[properties.starting_position] = k
但我无法想象没有一个班轮可以做同样的事情......
如果您使用的是 lodash 4.1.0 或更高版本,您可以使用此函数 https://lodash.com/docs#invertBy
_.invertBy data, (v) -> v.starting_position
https://jsfiddle.net/7kf9wn71/2/
你不能在语义上减少它,但你可以让它更简洁
byStartingPosition = {}
byStartingPosition[v.starting_position] = k for k,v of data
Rayon的评论几乎就在那里。您想使用reduce
:
byStartPos = Object.keys(data).reduce(((obj, k) -> start = data[k].starting_position; obj[start] = k; obj), {})
虽然这句话长得令人讨厌,不是很惯用的咖啡脚本,坦率地说,它的可读性不如你的原版,但它是一行。