Coffeescript将Array转换为Dict,该dict将具有多个值

时间:2019-05-24 10:39:42

标签: coffeescript

在coffeescript中,我正在尝试将对象数组转换为dict,其中将对象的值之一作为键,将数组中所有具有该值的对象作为键,并向上链接到该键的字典中的数组。

我尝试了此处建议的代码,但这导致每个键最多容纳一个对象。 https://coffeescript-cookbook.github.io/chapters/arrays/creating-a-dictionary-object-from-an-array

我找不到其他示例,这些示例不仅会导致每个键产生一个值。

例如(在上面链接的示例中进行扩展),我有一个数组

cats = [
  {
    name: "Bubbles"
    age: 1
  },
  {
    name: "Sparkle"
    favoriteFood: "tuna"
    age: 2
  },
  {
    name: "Felix"
    age: 2
  }
]

我希望我的结果成为

catDict = {
    1: [
         {
           name: "Bubbles"
           age: 1
         }
       ]
    2: [

         {
           name: "Sparkle"
           favoriteFood: "tuna"
           age: 2
         },
         {
           name: "Felix"
           age: 2
         }
       ]
}

2 个答案:

答案 0 :(得分:1)

catDict = {}
(catDict[cat.age]?.push(cat) or catDict[cat.age] = [cat]) for cat in cats

我使用了存在运算符?.的访问器变量来吸收空引用。当遇到空引用时,or的后半部分将启动以初始化数组。

它更短,但我不确定它是否更优雅...

答案 1 :(得分:0)

经典,我放弃并在StackOverflow上发布问题后立即提出解决方案,但这是我的解决方案:

addCatToDict = (cat, dict) ->
    key = cat.age 
    if key of dict then dict[key].push(cat) 
    else dict[key] = [cat]

catDict = {}
for cat in cats
    addCatToDict(cat, catDict)

有兴趣看到更优雅的解决方案