ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaScript 字符串差异对比

2021-10-22 17:32:18  阅读:270  来源: 互联网

标签:end sourceChars JavaScript len push var result 字符串 对比


getHighLightDifferent(a, b) {
        var temp = this.getDiffArray(a, b);
        var a1 = this.getHighLight(a, temp[0]);
        var a2 = this.getHighLight(b, temp[1]);
        return new Array(a1, a2);
      },
      getHighLight(source, temp) {
        var result = [];
        var sourceChars = source.split("");
        var tempChars = temp.split("");
        var flag = false;
        for (var i = 0; i < sourceChars.length; i++) {
          if (tempChars[i] != ' ') {
            if (i == 0) {
              result.push("<span style='color:red'>");
              result.push(sourceChars[i]);
            } else if (flag) {
              result.push(sourceChars[i]);
            } else {
              result.push("<span style='color:red'>");
              result.push(sourceChars[i]);
            }
            flag = true;
            if (i == sourceChars.length - 1) {
              result.push("</span>");
            }
          } else if (flag == true) {
            result.push("</span>");
            result.push(sourceChars[i]);
            flag = false;
          } else {
            result.push(sourceChars[i]);
          }
        }
        return result.join('');
      },
      getDiffArray(a, b) {
        var result = new Array();
        //选取长度较小的字符串用来穷举子串
        if (a.length < b.length) {
          var start = 0;
          var end = a.length;
          result = this.getDiff(a, b, start, end);
        } else {
          var start = 0;
          var end = b.length;
          result = this.getDiff(b, a, 0, b.length);
          result = new Array(result[1], result[0]);
        }
        return result;
      },
      //将a的指定部分与b进行比较生成比对结果
      getDiff(a, b, start, end) {
        var result = new Array(a, b);
        var len = result[0].length;
        while (len > 0) {
          for (var i = start; i < end - len + 1; i++) {
            var sub = result[0].substring(i, i + len);
            var idx = -1;
            if ((idx = result[1].indexOf(sub)) != -1) {
              result[0] = this.setEmpty(result[0], i, i + len);
              result[1] = this.setEmpty(result[1], idx, idx + len);
              if (i > 0) {
                //递归获取空白区域左边差异
                result = this.getDiff(result[0], result[1], start, i);
              }
              if (i + len < end) {
                //递归获取空白区域右边差异
                result = this.getDiff(result[0], result[1], i + len, end);
              }
              len = 0; //退出while循环
              break;
            }
          }
          len = parseInt(len / 2);
        }
        return result;
      },
      //将字符串s指定的区域设置成空格
      setEmpty(s, start, end) {
        var array = s.split("");
        for (var i = start; i < end; i++) {
          array[i] = ' ';
        }
        return array.join("");
      },

标签:end,sourceChars,JavaScript,len,push,var,result,字符串,对比
来源: https://blog.csdn.net/A_Lonely_Smile/article/details/120910198

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有