JavaScript 中获取两集合之间的差异

JavaScript 中要获得两个集合之间的差异:

  1. 将第一个 Set 转换为 Array。
  2. 使用 filter() 方法迭代数组。
  3. 使用 has() 方法检查每个元素是否不包含在第二个 Set 中。
  4. 将数组转换回 Set。
function getDifference(setA, setB) {
  return new Set(
    [...setA].filter(element => !setB.has(element))
  );
}

const set1 = new Set(['a', 'b', 'c']);
const set2 = new Set(['a', 'b']);

console.log(getDifference(set1, set2)); // ?️ {'c'}

我们使用扩展语法 … 将第一个 Set 转换为数组,因此我们可以对其调用 Array.filter 方法。

我们传递给 filter 方法的函数被数组中的每个元素调用。

在每次迭代中,我们通过否定 Set.has() 方法的结果来检查该元素是否不包含在第二个 Set 中。

如果元素包含在 Set 中,则 has() 方法返回 true,否则返回 false。

function getDifference(setA, setB) {
  return new Set(
    [...setA].filter(element => !setB.has(element))
  );
}

const set1 = new Set(['a']);
const set2 = new Set(['a', 'b', 'c']);

console.log(getDifference(set1, set2)); // ?️ {}

在上面的例子中,我们得到了一个空的 Set 来表示差异,而应该是一个包含 {‘b’, ‘c’} 的 Set。

我们只迭代了第一个 Set,它有 1 个元素,所以我们没有得到完全的不同。

function getDifference(setA, setB) {
  return new Set(
    [...setA].filter(element => !setB.has(element))
  );
}

const set1 = new Set(['a']);
const set2 = new Set(['a', 'b', 'c']);

const difference = new Set([
  ...getDifference(set1, set2),
  ...getDifference(set2, set1),
]);

console.log(difference); // ?️ {'b', 'c'}

这是我们为使它正常工作所做的工作:

  1. 遍历第一个 Set 的元素,只返回第二个 Set 中不包含的元素。
  2. 迭代第二个 Set 的元素并仅返回第一个中不包含的元素。
  3. 将结果组合成第三组。

现在,我们的示例包含了两个 Set 对象之间的完整差异。