给定具有属性的对象数组,我想计算每种属性类型的总出现次数。
我提供了一个代表 3 个不同实体的 3 个数组的示例(在生产中它可以变化多达 20.000 个实体):
const arr =
[ [ { attribute_type: 'Background', value: 'Orange' }
, { attribute_type: 'Fur', value: 'Black' }
, { attribute_type: 'Outfit', value: 'Casual' }
, { attribute_type: 'Earring', value: 'None' }
, { attribute_type: 'Eyes', value: 'Fiery' }
, { attribute_type: 'Mouth', value: 'Smiling' }
, { attribute_type: 'Shoes', value: 'Sandals' }
]
, [ { attribute_type: 'Background', value: 'Orange' }
, { attribute_type: 'Fur', value: 'Brown' }
, { attribute_type: 'Outfit', value: 'Casual' }
, { attribute_type: 'Earring', value: 'None' }
, { attribute_type: 'Eyes', value: 'Gold' }
, { attribute_type: 'Mouth', value: 'Smiling' }
]
, [ { attribute_type: 'Background', value: 'Diamond' }
, { attribute_type: 'Fur', value: 'Gold' }
, { attribute_type: 'Outfit', value: 'Dress' }
, { attribute_type: 'Earring', value: 'None' }
, { attribute_type: 'Eyes', value: 'Gold' }
, { attribute_type: 'Mouth', value: 'Smiling' }
]
]
属性类型可以变化并且事先是未知的。并不是每个属性类型都保证存在于数组中。
我想最终得到一个列表,其中包含每个类别的属性出现数(如果可能的话,按出现率升序排序):
const expected =
[ { Background: { Diamond: 1, Orange: 2 }}
, { Fur: { Black: 1, Brown: 1, Gold: 1 }}
, { Outfit: { Dress: 1, Casual: 2 }}
, { Earring: { None: 3 }}
, { Eyes: { Fiery: 1, Gold: 2 }}
, { Mouth: { Smiling: 3 }}
, { Shoes: { Sandals: 1 }}
]
我花了很多时间来解决这个问题,我试图看看 Map 数据结构和合并,但到目前为止没有成功。最终结果不必满足提供的格式,但我只是在尝试应用最佳实践。