迹忆客 专注技术分享

当前位置:主页 > 学无止境 > WEB前端 > JavaScript >

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

作者:迹忆客 最近更新:2022/12/22 浏览次数:

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'}

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

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

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

filter 方法返回一个包含元素的新数组,回调函数为其返回真值。

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

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

但是 ,这不会返回 Set 之间的完整差异,因为我们只检查第一个 Set 中的元素是否不包含在第二个 Set 中。 我们没有检查第二个 Set 中的元素是否不包含在第一个中。

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 个元素,所以我们没有得到完全的不同。

要解决这个问题,我们需要调用两次 getDifference 方法,然后合并结果。

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 对象之间的完整差异。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便