列表比较器 - 在线比较两个列表并找出差异
比较两个列表,使用集合运算找出唯一项、重复项、交集和并集 — 100%客户端处理,数据不发送到服务器。
区分大小写
去除空格
删除空行
排序
列表 A
列表 B
仅在 A
未找到项目
常见问题
什么是列表比较器?为什么需要它?
列表比较器是一种工具,它获取两个列表的项目并执行集合运算,以找出差异、共同元素和组合结果。它对于数据核对任务至关重要,例如比较电子邮件订阅者列表、验证数据库迁移、审核服务器配置等。
如何使用这个列表比较工具?
在列表A和列表B的文本区域中输入项目,每行一个。工具会在您输入时自动实时比较列表。结果按标签页组织:仅在A、仅在B、交集、并集和对称差。
我的数据安全吗?列表会上传到服务器吗?
您的数据100%安全,永远不会离开您的浏览器。所有比较操作都在浏览器中使用JavaScript在客户端执行。不会将数据传输到任何服务器,也不会存储数据。
差集和对称差有什么区别?
差集(A - B)给出在列表A中但不在列表B中的项目。它是有方向性的。对称差(A XOR B)给出在任一列表中但不在两者中的所有项目。
大小写敏感性如何影响比较?
当大小写敏感性启用时(默认),Apple和apple被视为不同的项目。当禁用时,它们被视为相同的项目。
统计中显示的Jaccard相似度指数是什么?
Jaccard指数衡量两个集合的相似程度。计算方法是交集大小除以并集大小。0表示没有共同项目,1(100%)表示列表完全相同。
工具如何处理单个列表中的重复项?
工具检测每个列表中的重复项,并在重复A和重复B标签页中显示出现次数。对于集合运算,每个唯一项目无论出现多少次都只计算一次。
这个工具能处理非常大的列表吗?
可以。该工具使用在现代浏览器中高度优化的JavaScript Set运算。最多100,000个项目的列表可以在500毫秒内完成比较。
代码示例
// List comparison using JavaScript Set operations
function compareLists(listA, listB, options = {}) {
const { caseSensitive = true, trimWhitespace = true } = options;
const normalize = (item) => {
let result = item;
if (trimWhitespace) result = result.trim();
if (!caseSensitive) result = result.toLowerCase();
return result;
};
const itemsA = listA.map(normalize).filter(Boolean);
const itemsB = listB.map(normalize).filter(Boolean);
const setA = new Set(itemsA);
const setB = new Set(itemsB);
const onlyInA = [...setA].filter((item) => !setB.has(item));
const onlyInB = [...setB].filter((item) => !setA.has(item));
const intersection = [...setA].filter((item) => setB.has(item));
const union = [...new Set([...setA, ...setB])];
const symmetricDiff = [...onlyInA, ...onlyInB];
const jaccardIndex = union.length > 0
? intersection.length / union.length : 0;
return { onlyInA, onlyInB, intersection, union, symmetricDiff,
stats: { jaccardIndex: Math.round(jaccardIndex * 1000) / 1000 } };
}
// Usage
const a = ['apple', 'banana', 'cherry', 'date'];
const b = ['banana', 'date', 'elderberry', 'fig'];
const result = compareLists(a, b);
console.log('Only in A:', result.onlyInA);
// ['apple', 'cherry']
console.log('Intersection:', result.intersection);
// ['banana', 'date']