How to customize object equality for JavaScript Set

后端 未结 9 1384
臣服心动
臣服心动 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:16

    Maybe you can try to use JSON.stringify() to do deep object comparison.

    for example :

    const arr = [
      {name:'a', value:10},
      {name:'a', value:20},
      {name:'a', value:20},
      {name:'b', value:30},
      {name:'b', value:40},
      {name:'b', value:40}
    ];
    
    const names = new Set();
    const result = arr.filter(item => !names.has(JSON.stringify(item)) ? names.add(JSON.stringify(item)) : false);
    
    console.log(result);

提交回复
热议问题