给定一个具有属性的对象数组,我想计算每个属性类型的总外观。
我提供了一个代表3个不同实体的3个阵列的示例(在生产过程中,最多可变化20000个实体):
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数据结构和合并,但迄今为止没有成功。最终结果不必满足提供的格式,但我只是尝试应用最佳实践。
5条答案
按热度按时间qni6mghb1#
只需在数组中循环,并使用一个对象来收集所需的结果。
yyyllmsg2#
一个简单的函数就可以做到这一点,只需将对象放入其中,它就会返回另一个对象和结果。
quhf5bfb3#
问题的命令式解决方案:
35g0bw714#
将每个属性类型的结果按升序排序有点困难,我还将它们按字母顺序排列,以防出现平局
一些链接:
array.flat()、array.sort()、array.reduce()、str1.localecompare(str2)、null合并运算符(?)
(是的,您可以在mdn在线文档中找到相关信息)
z4bn682m5#