删除现有集合中的一组值

Mor*_*bet 5 javascript arrays

在 JavaScript 中,我有以下Set

var mySet = new Set(["foo", "bar", "baz"]);
var valuesToRemove = new Set(["foo", "baz"]);
Run Code Online (Sandbox Code Playgroud)

我需要一个删除一组值的函数:

removeAll(mySet, valuesToRemove);
// expected value of mySet: Set ["bar"]

// or a function that returns a new Set
var myNewSet = removeAll(mySet, valuesToRemove);
// expected value of myNewSet: Set ["bar"]
Run Code Online (Sandbox Code Playgroud)

问题:是否存在任何与ES6 模块兼容的库来解决这个问题?

LodashArray类似的功能,但支持 JavaScript内置可迭代标记为。而且我更喜欢避免进行多次 Array?Set/Set?Array 转换。wontfix

或者,我将编写自己的函数。

Yel*_*yev 8

编写自己的函数比使用库来实现单个轻量级功能要容易得多:

var mySet = new Set(["foo", "bar", "baz"]);
var valuesToRemove = new Set(["foo", "baz"]);

function removeAll(originalSet, toBeRemovedSet) {
  [...toBeRemovedSet].forEach(function(v) {
    originalSet.delete(v); 
  });
}

console.log([...mySet]);
removeAll(mySet, valuesToRemove);
console.log([...mySet]);
Run Code Online (Sandbox Code Playgroud)

根据您的问题,自从您使用 ES6 以来,我一直使用 ES6 语法。为方便起见,
您可以在静态类中使用此函数SetUtility


gue*_*314 2

您可以使用for..of循环.delete()

var removeAll = (keys, arr) => {for (prop of keys) arr.delete(prop); return arr};
removeAll(valuesToRemove, mySet); // `Set [ "bar" ]`
Run Code Online (Sandbox Code Playgroud)