TypeScript - 查找具有重复值的数组之间的差异
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 - 删除了重复项
问题的原因是作者想要找到原始数组和去重后数组之间的差异,以便能够向用户显示哪些项目被移除了。使用其他问题的建议或现有答案只能对数组进行去重,而不能考虑重复项,因此无法检测到差异。
解决方法是通过以下步骤:
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` 对他们不起作用感到困惑。