我正在尝试获得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
内的破坏变得混乱。第二种选择是创建左和上的超集。对&迭代它,但这甚至更慢。有什么想法吗?