在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
}
]
}
答案 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)
有兴趣看到更优雅的解决方案