我的数据格式如下:
data = {
car1: {
starting_position: 1,
...
},
car5: {
starting_position: 2,
...
}
}
我想创建一个对象,其中starting_position
成为键,原始data
中的键成为值。我可以这样做:
byStartingPosition = {}
for k, properties of data
byStartingPosition[properties.starting_position] = k
但我无法想象没有一个班轮可以做同样的事情......
答案 0 :(得分:1)
你不能在语义上减少它,但你可以使它更简洁
byStartingPosition = {}
byStartingPosition[v.starting_position] = k for k,v of data
答案 1 :(得分:1)
如果您使用的是lodash 4.1.0或更高版本,则可以使用此功能进行https://lodash.com/docs#invertBy
_.invertBy data, (v) -> v.starting_position
答案 2 :(得分:0)
Rayon的评论至关重要。您想使用reduce
:
byStartPos = Object.keys(data).reduce(((obj, k) -> start = data[k].starting_position; obj[start] = k; obj), {})
虽然那是令人讨厌的长篇,不是非常惯用的咖啡因,而且坦率地说比你原来的可读性差,但这只是一个单行。