有效地为ES2015 Set创建左/右差异

时间:2016-04-14 23:50:29

标签: javascript ecmascript-6

我正在尝试获得2组的差异,其中返回值为2 new sets:左侧参数唯一的值,右侧唯一值。

例如:

const left = new Set([1,2,3]);
const right = new Set([2,3,4]);

const {diffLeft, diffRight} = makeDiff(left, right);
console.log(diffLeft); // Set{1}
console.log(diffRight); // Set{4};

我天真的解决方案:

const makeDiff = (left, right) => {
  const diffLeft = diff1Side(left, right);
  const diffRight = diff1Side(right, left);
  return {diffLeft, diffRight}
};

const diff1Side = (a,b) => {
  const uniqueDiff = new Set();
  for (let val of a) {
    if (!b.has(val)) {
      uniqueDiff.add(val)
    }
  }
  return uniqueDiff;
};

我的解决方案有效,但速度很慢。考虑到我只能销毁left的约束,我可以在第一次迭代中删除它的交叉点以使第二次迭代更快,但for...of内的破坏变得混乱。第二种选择是创建左和上的超集。对&迭代它,但这甚至更慢。有什么想法吗?

0 个答案:

没有答案