有什么明智的方法可以在Javascript中将键设置为Set对象的字典?
对于上下文,我的问题是我有一个列表列表,并且想要计算每种组合出现的次数,而忽略元素的顺序和重复。我可以制作一个字典,其中的列表本身就是元素,但是如果我尝试使用集合,则将每个集合都视为具有值[object Set]
的相同键。
例如:
var list_of_lists = [[1,2], [1], [1], [2,1], [1,1]]
var count_of_id_combos = {}
var count_of_id_combo_sets = {}
list_of_lists.forEach(
function(sub_list, index){
count_of_id_combos[sub_list] = (count_of_id_combos[sub_list] || 0) + 1
var set_of_sublist = new Set(sub_list)
count_of_id_combo_sets[set_of_sublist] = (count_of_id_combo_sets[set_of_sublist] || 0) + 1
}
)
console.log(count_of_id_combos) // -> Object {1: 2, 1,2: 1, 2,1: 1, 1,1: 1}
console.log(count_of_id_combo_sets) // -> Object {[object Set]: 5}
而我希望第二个对象是类似的
Object {1: 3, 1,2: 2}
我也尝试过使用Map
并且发生了同样的事情。我想出的唯一解决方案是手动过滤出重复项,然后对列表进行排序,虽然可行,但看起来过于复杂,我想知道是否缺少某些东西。
答案 0 :(得分:1)
一种执行所需操作的方法是将集合转换为字符串。例如,
let map = new Map()
let setSet = new Set([3, 1, 2])
let setKey = Array.from(setSet).sort().join()
map.set(setKey, "foo")
let getSet = new Set([2, 1, 1, 3])
let getKey = Array.from(getSet).sort().join()
console.log(map.get(getKey))