How to customize object equality for JavaScript Set

后端 未结 9 1368
臣服心动
臣服心动 2020-11-22 16:48

New ES 6 (Harmony) introduces new Set object. Identity algorithm used by Set is similar to === operator and so not much suitable for comparing objects:

9条回答
  •  臣服心动
    2020-11-22 17:02

    Create a new set from the combination of both sets, then compare the length.

    let set1 = new Set([1, 2, 'a', 'b'])
    let set2 = new Set([1, 'a', 'a', 2, 'b'])
    let set4 = new Set([1, 2, 'a'])
    
    function areSetsEqual(set1, set2) {
      const set3 = new Set([...set1], [...set2])
      return set3.size === set1.size && set3.size === set2.size
    }
    
    console.log('set1 equals set2 =', areSetsEqual(set1, set2))
    console.log('set1 equals set4 =', areSetsEqual(set1, set4))
    

    set1 equals set2 = true

    set1 equals set4 = false

提交回复
热议问题