簡體   English   中英

Javascript:以集合為鍵創建字典/地圖/對象

[英]Javascript: Creating a Dictionary/Map/Object with Sets as keys

有什么明智的方法可以在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 ,同樣的事情也會發生。 我想出的唯一解決方案是手動過濾出重復項,然后對列表進行排序,雖然可行,但似乎過於復雜,我想知道是否缺少某些內容。

一種執行所需操作的方法是將集合轉換為字符串。 例如,

 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)) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM