在Array原型中创建JS Set

时间:2017-06-14 13:05:11

标签: javascript arrays set prototype

声明: 这是出于学习目的,我已经知道为js内置对象添加方法不是一个好习惯。

我试图为一个小型爱好项目添加一个新方法到数组原型:

    Array.prototype.add = function (element) {
      console.log('array before: ' + JSON.stringify(this));
      let arr = this;
      if (arr.length) {
        let set = new Set(arr);
        console.log('set before: ' + JSON.stringify(set));
        console.log('adding element: ' + JSON.stringify(element));
        set = set.add(element);
        console.log('set after: ' + JSON.stringify(set));
      } else {
        arr.push(element);
      }
      console.log('array after: ' + JSON.stringify(arr));
    };

一旦按预期推送,尝试调用新方法。在连续调用"数组之前:"日志按照预期打印,第一次按下组成数组的内容,但是将数组提供给我的Set构造函数会产生一个空集,正如我之前设置的那样:"设置之前:"并且"设置在:"记录打印空{}。我不确定为什么Set不会从数组中实例化,任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

JSON.stringify始终会为集合

生成一个空对象

var s = new Set([1,2,3]);
console.log(s.size);
console.log(JSON.stringify(s));

集合没有可序列化的属性。换句话说,您使用错误的方法来验证集合是否为空并且跳到了错误的结论。请改为记录set.size,或仅记录set

相关:JSON stringify a Set