如何找出两个字符串的差异并返回不匹配内容?
找出两个字符串的差异字符
你的代码里用match()方法是尝试在目标字符串中匹配完整的对比字符串,因为两个字符串不完全一致,所以返回null,这不是逐字符找差异的正确方式。下面是几种实用的实现方式:
基础逐字符对比(等长字符串)
如果两个字符串长度相同,直接遍历每个位置对比字符,收集不匹配的内容:
const str1 = "zoho"; const str2 = "zogo"; const differences = []; for (let i = 0; i < str1.length; i++) { if (str1[i] !== str2[i]) { differences.push({ 位置: i + 1, // 从1开始计数更符合日常习惯 str1字符: str1[i], str2字符: str2[i] }); } } console.log(differences); // 输出: [{ 位置: 3, str1字符: 'h', str2字符: 'g' }]
兼容不同长度的字符串
如果两个字符串长度不同,先取最长长度遍历,缺失的字符用空字符串代替:
const str1 = "zoho"; const str2 = "zogox"; const maxLength = Math.max(str1.length, str2.length); const differences = []; for (let i = 0; i < maxLength; i++) { const char1 = str1[i] || ''; const char2 = str2[i] || ''; if (char1 !== char2) { differences.push({ 位置: i + 1, str1字符: char1, str2字符: char2 }); } } console.log(differences); // 输出: [{ 位置: 3, str1字符: 'h', str2字符: 'g' }, { 位置: 5, str1字符: '', str2字符: 'x' }]
简洁写法(数组方法)
用ES6的扩展运算符和数组方法实现更简洁的代码:
const str1 = "zoho"; const str2 = "zogo"; const differences = [...str1] .map((char, index) => ({ 位置: index + 1, str1字符: char, str2字符: str2[index] })) .filter(item => item.str1字符 !== item.str2字符); console.log(differences);
内容的提问来源于stack exchange,提问作者Ramesh
相关产品推荐
相关产品推荐

