CoffeeScript:一个将对象映射到另一个行



>我有以下格式的数据:

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), {})

虽然这句话长得令人讨厌,不是很惯用的咖啡脚本,坦率地说,它的可读性不如你的原版,但它是一行。

最新更新