TypeScript - 查找具有重复值的数组之间的差异

10 浏览
0 Comments

TypeScript - 查找具有重复值的数组之间的差异

编辑:请在关闭问题之前阅读问题!建议的答案与我所问的完全无关。我不是在寻找一个单一的数组解决方案,我正在使用两个数组...

我正在对一个数组进行去重,但是当我尝试找到差异时,它找不到任何差异,因为新数组中的内容在旧数组中:

const original = [1,2,2,3,4]

const newArr = Array.from(new Set(original).values());

const diff = original.filter(line => !newArr.includes(line));

我希望找到的差异是2。在我的真实示例中,我正在使用加密钱包地址,并且我需要对列表进行去重,但我还想将原始数组和新数组之间的差异打印到标准输出。

示例:

给定以下输入

123asd123asd123

123asd123asd123

890wer890wer809

我期望得到以下输出

去重完成!

钱包123asd123asd123 - 删除了重复项

0
0 Comments

问题的原因是作者想要找到原始数组和去重后数组之间的差异,以便能够向用户显示哪些项目被移除了。使用其他问题的建议或现有答案只能对数组进行去重,而不能考虑重复项,因此无法检测到差异。

解决方法是通过以下步骤:

1. 定义原始数组 `original` 和去重后数组 `deduped`。

2. 创建一个新数组 `diff`,用于存储差异。

3. 遍历去重后数组 `deduped`,对于每个元素 `item`:

- 如果原始数组 `original` 包含该元素,则从 `diff` 中移除该元素。

4. 打印剩余在 `diff` 中的元素,即为差异。

下面是完整的解决方案代码:

const original = [
    "apple",
    "apple",
    "banana",
    "orange",
    "apple",
];
// After deduplication, code omitted for clarity
// deduped = Array.from(new Set(original).values());
const deduped = [
    "banana",
    "orange",
    "apple",
];
// Now lets find the differences
let diff = original.slice();
for (let i = 0; i < deduped.length; i++) {
    const item = deduped[i];
    if (diff.includes(item)) {
        diff.splice(diff.indexOf(item), 1);
    }
}
// Display the difference of what is not in the deduced array
console.log(diff);

运行以上代码,输出结果为 `["apple", "apple"]`,这是原始数组中被去重后数组移除的差异项。

作者在这个问题中使用了 TypeScript,尽管没有包含类型注解,但也不需要像其他答案那样添加类型注解。这个解决方法可能不是最简洁的,但解决了作者的问题。

作者将这个方法用于一个格式化函数,该函数用于查看两个文本文件之间按行进行的所有更改。

作者表示对于为什么链接 `this` 对他们不起作用感到困惑。

0