wsemi
Version:
A support package for web developer.
598 lines (534 loc) • 45.1 kB
HTML
<html lang="en">
<head>
<meta charset="utf-8">
<title>strDiff.mjs - Documentation</title>
<script src="scripts/prettify/prettify.js"></script>
<script src="scripts/prettify/lang-css.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
<script src="scripts/nav.js" defer></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
<label for="nav-trigger" class="overlay"></label>
<nav >
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="wsemi.html">wsemi</a><ul class='methods'><li data-type='method'><a href="wsemi.html#.ab2blob">ab2blob</a></li><li data-type='method'><a href="wsemi.html#.ab2u8arr">ab2u8arr</a></li><li data-type='method'><a href="wsemi.html#.addExcelWorksheetFromData">addExcelWorksheetFromData</a></li><li data-type='method'><a href="wsemi.html#.addMonth">addMonth</a></li><li data-type='method'><a href="wsemi.html#.aes2str">aes2str</a></li><li data-type='method'><a href="wsemi.html#.alive">alive</a></li><li data-type='method'><a href="wsemi.html#.arr2dt">arr2dt</a></li><li data-type='method'><a href="wsemi.html#.arrAccum">arrAccum</a></li><li data-type='method'><a href="wsemi.html#.arrAdd">arrAdd</a></li><li data-type='method'><a href="wsemi.html#.arrAt">arrAt</a></li><li data-type='method'><a href="wsemi.html#.arrDiff">arrDiff</a></li><li data-type='method'><a href="wsemi.html#.arrFilterByKeywords">arrFilterByKeywords</a></li><li data-type='method'><a href="wsemi.html#.arrFilterByNum">arrFilterByNum</a></li><li data-type='method'><a href="wsemi.html#.arrFilterByPnum">arrFilterByPnum</a></li><li data-type='method'><a href="wsemi.html#.arrFilterByPnumAndToLog">arrFilterByPnumAndToLog</a></li><li data-type='method'><a href="wsemi.html#.arrFind">arrFind</a></li><li data-type='method'><a href="wsemi.html#.arrGroupByMaxmin">arrGroupByMaxmin</a></li><li data-type='method'><a href="wsemi.html#.arrHas">arrHas</a></li><li data-type='method'><a href="wsemi.html#.arrInsert">arrInsert</a></li><li data-type='method'><a href="wsemi.html#.arrLookupByMaxmin">arrLookupByMaxmin</a></li><li data-type='method'><a href="wsemi.html#.arrMax">arrMax</a></li><li data-type='method'><a href="wsemi.html#.arrMin">arrMin</a></li><li data-type='method'><a href="wsemi.html#.arrMulti">arrMulti</a></li><li data-type='method'><a href="wsemi.html#.arrNorm">arrNorm</a></li><li data-type='method'><a href="wsemi.html#.arrProduct">arrProduct</a></li><li data-type='method'><a href="wsemi.html#.arrReduce">arrReduce</a></li><li data-type='method'><a href="wsemi.html#.arrSep">arrSep</a></li><li data-type='method'><a href="wsemi.html#.arrSort">arrSort</a></li><li data-type='method'><a href="wsemi.html#.asind">asind</a></li><li data-type='method'><a href="wsemi.html#.atan2d">atan2d</a></li><li data-type='method'><a href="wsemi.html#.atand">atand</a></li><li data-type='method'><a href="wsemi.html#.attstr">attstr</a></li><li data-type='method'><a href="wsemi.html#.b642obj">b642obj</a></li><li data-type='method'><a href="wsemi.html#.b642str">b642str</a></li><li data-type='method'><a href="wsemi.html#.b642u16arr">b642u16arr</a></li><li data-type='method'><a href="wsemi.html#.b642u8arr">b642u8arr</a></li><li data-type='method'><a href="wsemi.html#.binstr">binstr</a></li><li data-type='method'><a href="wsemi.html#.blob2ab">blob2ab</a></li><li data-type='method'><a href="wsemi.html#.blob2b64">blob2b64</a></li><li data-type='method'><a href="wsemi.html#.blob2str">blob2str</a></li><li data-type='method'><a href="wsemi.html#.blob2u8arr">blob2u8arr</a></li><li data-type='method'><a href="wsemi.html#.blobs2b64s">blobs2b64s</a></li><li data-type='method'><a href="wsemi.html#.blobs2u8arrs">blobs2u8arrs</a></li><li data-type='method'><a href="wsemi.html#.bodyLog">bodyLog</a></li><li data-type='method'><a href="wsemi.html#.browserView">browserView</a></li><li data-type='method'><a href="wsemi.html#.browserViewFromBlob">browserViewFromBlob</a></li><li data-type='method'><a href="wsemi.html#.browserViewFromText">browserViewFromText</a></li><li data-type='method'><a href="wsemi.html#.browserViewFromU8arr">browserViewFromU8arr</a></li><li data-type='method'><a href="wsemi.html#.bs2u8arr">bs2u8arr</a></li><li data-type='method'><a href="wsemi.html#.bufRead">bufRead</a></li><li data-type='method'><a href="wsemi.html#.bufReadDbl">bufReadDbl</a></li><li data-type='method'><a href="wsemi.html#.bufWrite">bufWrite</a></li><li data-type='method'><a href="wsemi.html#.bufWriteDbl">bufWriteDbl</a></li><li data-type='method'><a href="wsemi.html#.cache">cache</a></li><li data-type='method'><a href="wsemi.html#.cbol">cbol</a></li><li data-type='method'><a href="wsemi.html#.cdbl">cdbl</a></li><li data-type='method'><a href="wsemi.html#.cfilesize">cfilesize</a></li><li data-type='method'><a href="wsemi.html#.cfinancial">cfinancial</a></li><li data-type='method'><a href="wsemi.html#.cint">cint</a></li><li data-type='method'><a href="wsemi.html#.clearXSS">clearXSS</a></li><li data-type='method'><a href="wsemi.html#.color">color</a></li><li data-type='method'><a href="wsemi.html#.composeToTree">composeToTree</a></li><li data-type='method'><a href="wsemi.html#.convertToTree">convertToTree</a></li><li data-type='method'><a href="wsemi.html#.copyStrToClipboard">copyStrToClipboard</a></li><li data-type='method'><a href="wsemi.html#.cosd">cosd</a></li><li data-type='method'><a href="wsemi.html#.cotd">cotd</a></li><li data-type='method'><a href="wsemi.html#.createExcelWorkbook">createExcelWorkbook</a></li><li data-type='method'><a href="wsemi.html#.cscd">cscd</a></li><li data-type='method'><a href="wsemi.html#.cstr">cstr</a></li><li data-type='method'><a href="wsemi.html#.day2cht">day2cht</a></li><li data-type='method'><a href="wsemi.html#.debounce">debounce</a></li><li data-type='method'><a href="wsemi.html#.delay">delay</a></li><li data-type='method'><a href="wsemi.html#.dig">dig</a></li><li data-type='method'><a href="wsemi.html#.digExp">digExp</a></li><li data-type='method'><a href="wsemi.html#.domAlert">domAlert</a></li><li data-type='method'><a href="wsemi.html#.domAppend">domAppend</a></li><li data-type='method'><a href="wsemi.html#.domCancelEvent">domCancelEvent</a></li><li data-type='method'><a href="wsemi.html#.domCompareText">domCompareText</a></li><li data-type='method'><a href="wsemi.html#.domCompareTextDyn">domCompareTextDyn</a></li><li data-type='method'><a href="wsemi.html#.domConvertToPic">domConvertToPic</a></li><li data-type='method'><a href="wsemi.html#.domConvertToPicDyn">domConvertToPicDyn</a></li><li data-type='method'><a href="wsemi.html#.domDetect">domDetect</a></li><li data-type='method'><a href="wsemi.html#.domDrag">domDrag</a></li><li data-type='method'><a href="wsemi.html#.domDragBarAndScroll">domDragBarAndScroll</a></li><li data-type='method'><a href="wsemi.html#.domDragPreview">domDragPreview</a></li><li data-type='method'><a href="wsemi.html#.domDropFiles">domDropFiles</a></li><li data-type='method'><a href="wsemi.html#.domElementsFromPoint">domElementsFromPoint</a></li><li data-type='method'><a href="wsemi.html#.domFadeIn">domFadeIn</a></li><li data-type='method'><a href="wsemi.html#.domFadeOut">domFadeOut</a></li><li data-type='method'><a href="wsemi.html#.domFind">domFind</a></li><li data-type='method'><a href="wsemi.html#.domFinds">domFinds</a></li><li data-type='method'><a href="wsemi.html#.domGetAttr">domGetAttr</a></li><li data-type='method'><a href="wsemi.html#.domGetBoudRect">domGetBoudRect</a></li><li data-type='method'><a href="wsemi.html#.domGetBoudRectRefSelf">domGetBoudRectRefSelf</a></li><li data-type='method'><a href="wsemi.html#.domGetFileAccept">domGetFileAccept</a></li><li data-type='method'><a href="wsemi.html#.domGetFiles">domGetFiles</a></li><li data-type='method'><a href="wsemi.html#.domGetParents">domGetParents</a></li><li data-type='method'><a href="wsemi.html#.domGetPointFromEvent">domGetPointFromEvent</a></li><li data-type='method'><a href="wsemi.html#.domGetScrollableParent">domGetScrollableParent</a></li><li data-type='method'><a href="wsemi.html#.domGetWindowSize">domGetWindowSize</a></li><li data-type='method'><a href="wsemi.html#.domIsClientXYIn">domIsClientXYIn</a></li><li data-type='method'><a href="wsemi.html#.domIsFocused">domIsFocused</a></li><li data-type='method'><a href="wsemi.html#.domIsVisible">domIsVisible</a></li><li data-type='method'><a href="wsemi.html#.domPrepend">domPrepend</a></li><li data-type='method'><a href="wsemi.html#.domRemove">domRemove</a></li><li data-type='method'><a href="wsemi.html#.domRenderMarkdownMind">domRenderMarkdownMind</a></li><li data-type='method'><a href="wsemi.html#.domRenderMarkdownMindDyn">domRenderMarkdownMindDyn</a></li><li data-type='method'><a href="wsemi.html#.domRipple">domRipple</a></li><li data-type='method'><a href="wsemi.html#.domScrollIntoView">domScrollIntoView</a></li><li data-type='method'><a href="wsemi.html#.domScrollTo">domScrollTo</a></li><li data-type='method'><a href="wsemi.html#.domShowImages">domShowImages</a></li><li data-type='method'><a href="wsemi.html#.domShowImagesDyn">domShowImagesDyn</a></li><li data-type='method'><a href="wsemi.html#.domShowInputAndGetFiles">domShowInputAndGetFiles</a></li><li data-type='method'><a href="wsemi.html#.domShowInputAndGetFilesU8Arrs">domShowInputAndGetFilesU8Arrs</a></li><li data-type='method'><a href="wsemi.html#.domTooltip">domTooltip</a></li><li data-type='method'><a href="wsemi.html#.domTriggerEvent">domTriggerEvent</a></li><li data-type='method'><a href="wsemi.html#.domVirtualCreate">domVirtualCreate</a></li><li data-type='method'><a href="wsemi.html#.domVirtualCreateQueue">domVirtualCreateQueue</a></li><li data-type='method'><a href="wsemi.html#.downloadExcelFileFromData">downloadExcelFileFromData</a></li><li data-type='method'><a href="wsemi.html#.downloadExcelFileFromDataDyn">downloadExcelFileFromDataDyn</a></li><li data-type='method'><a href="wsemi.html#.downloadFileFromB64">downloadFileFromB64</a></li><li data-type='method'><a href="wsemi.html#.downloadFileFromBlob">downloadFileFromBlob</a></li><li data-type='method'><a href="wsemi.html#.downloadFileFromText">downloadFileFromText</a></li><li data-type='method'><a href="wsemi.html#.downloadFileFromU8Arr">downloadFileFromU8Arr</a></li><li data-type='method'><a href="wsemi.html#.dtmapping">dtmapping</a></li><li data-type='method'><a href="wsemi.html#.dtpick">dtpick</a></li><li data-type='method'><a href="wsemi.html#.evem">evem</a></li><li data-type='method'><a href="wsemi.html#.execProcess">execProcess</a></li><li data-type='method'><a href="wsemi.html#.execScript">execScript</a></li><li data-type='method'><a href="wsemi.html#.f2c">f2c</a></li><li data-type='method'><a href="wsemi.html#.filepathToTree">filepathToTree</a></li><li data-type='method'><a href="wsemi.html#.files2data">files2data</a></li><li data-type='method'><a href="wsemi.html#.flattenToConn">flattenToConn</a></li><li data-type='method'><a href="wsemi.html#.flattenTree">flattenTree</a></li><li data-type='method'><a href="wsemi.html#.fsCleanFolder">fsCleanFolder</a></li><li data-type='method'><a href="wsemi.html#.fsCopyFolder">fsCopyFolder</a></li><li data-type='method'><a href="wsemi.html#.fsCreateFile">fsCreateFile</a></li><li data-type='method'><a href="wsemi.html#.fsCreateFolder">fsCreateFolder</a></li><li data-type='method'><a href="wsemi.html#.fsDeleteFile">fsDeleteFile</a></li><li data-type='method'><a href="wsemi.html#.fsDeleteFolder">fsDeleteFolder</a></li><li data-type='method'><a href="wsemi.html#.fsEvem">fsEvem</a></li><li data-type='method'><a href="wsemi.html#.fsGetFilesInFolder">fsGetFilesInFolder</a></li><li data-type='method'><a href="wsemi.html#.fsGetFoldersInFolder">fsGetFoldersInFolder</a></li><li data-type='method'><a href="wsemi.html#.fsIsFile">fsIsFile</a></li><li data-type='method'><a href="wsemi.html#.fsIsFolder">fsIsFolder</a></li><li data-type='method'><a href="wsemi.html#.fsReadText">fsReadText</a></li><li data-type='method'><a href="wsemi.html#.fsRenameFile">fsRenameFile</a></li><li data-type='method'><a href="wsemi.html#.fsRenameFolder">fsRenameFolder</a></li><li data-type='method'><a href="wsemi.html#.fsTreeFolder">fsTreeFolder</a></li><li data-type='method'><a href="wsemi.html#.fsWatchFile">fsWatchFile</a></li><li data-type='method'><a href="wsemi.html#.fsWriteText">fsWriteText</a></li><li data-type='method'><a href="wsemi.html#.genGradientColor">genGradientColor</a></li><li data-type='method'><a href="wsemi.html#.genID">genID</a></li><li data-type='method'><a href="wsemi.html#.genPm">genPm</a></li><li data-type='method'><a href="wsemi.html#.getBufferSize">getBufferSize</a></li><li data-type='method'><a href="wsemi.html#.getClearPathName">getClearPathName</a></li><li data-type='method'><a href="wsemi.html#.getCsvStrFromData">getCsvStrFromData</a></li><li data-type='method'><a href="wsemi.html#.getDataFromExcelFileU8Arr">getDataFromExcelFileU8Arr</a></li><li data-type='method'><a href="wsemi.html#.getDataFromExcelFileU8ArrDyn">getDataFromExcelFileU8ArrDyn</a></li><li data-type='method'><a href="wsemi.html#.getDirName">getDirName</a></li><li data-type='method'><a href="wsemi.html#.getEnv">getEnv</a></li><li data-type='method'><a href="wsemi.html#.getExcelU8ArrFromData">getExcelU8ArrFromData</a></li><li data-type='method'><a href="wsemi.html#.getExcelU8ArrFromWorkbook">getExcelU8ArrFromWorkbook</a></li><li data-type='method'><a href="wsemi.html#.getExcelWorkbookFromData">getExcelWorkbookFromData</a></li><li data-type='method'><a href="wsemi.html#.getExcelWorkbookFromWorksheet">getExcelWorkbookFromWorksheet</a></li><li data-type='method'><a href="wsemi.html#.getExcelWorksheetFromData">getExcelWorksheetFromData</a></li><li data-type='method'><a href="wsemi.html#.getFileAccept">getFileAccept</a></li><li data-type='method'><a href="wsemi.html#.getFileName">getFileName</a></li><li data-type='method'><a href="wsemi.html#.getFileTrueName">getFileTrueName</a></li><li data-type='method'><a href="wsemi.html#.getGlobal">getGlobal</a></li><li data-type='method'><a href="wsemi.html#.getObjSize">getObjSize</a></li><li data-type='method'><a href="wsemi.html#.getTimeBetween">getTimeBetween</a></li><li data-type='method'><a href="wsemi.html#.getTimeFromUnit">getTimeFromUnit</a></li><li data-type='method'><a href="wsemi.html#.getTimeObject">getTimeObject</a></li><li data-type='method'><a href="wsemi.html#.getTimeRange">getTimeRange</a></li><li data-type='method'><a href="wsemi.html#.getUserAgent">getUserAgent</a></li><li data-type='method'><a href="wsemi.html#.getUserAgentDyn">getUserAgentDyn</a></li><li data-type='method'><a href="wsemi.html#.getltdtkeys">getltdtkeys</a></li><li data-type='method'><a href="wsemi.html#.haskey">haskey</a></li><li data-type='method'><a href="wsemi.html#.html2pic">html2pic</a></li><li data-type='method'><a href="wsemi.html#.html2picDyn">html2picDyn</a></li><li data-type='method'><a href="wsemi.html#.html2str">html2str</a></li><li data-type='method'><a href="wsemi.html#.html2strDyn">html2strDyn</a></li><li data-type='method'><a href="wsemi.html#.htmlDecode">htmlDecode</a></li><li data-type='method'><a href="wsemi.html#.htmlEncode">htmlEncode</a></li><li data-type='method'><a href="wsemi.html#.importResources">importResources</a></li><li data-type='method'><a href="wsemi.html#.interp1">interp1</a></li><li data-type='method'><a href="wsemi.html#.isDev">isDev</a></li><li data-type='method'><a href="wsemi.html#.isEle">isEle</a></li><li data-type='method'><a href="wsemi.html#.isEleExistByID">isEleExistByID</a></li><li data-type='method'><a href="wsemi.html#.isEmail">isEmail</a></li><li data-type='method'><a href="wsemi.html#.isIE">isIE</a></li><li data-type='method'><a href="wsemi.html#.isNarrow">isNarrow</a></li><li data-type='method'><a href="wsemi.html#.isStrHasCapital">isStrHasCapital</a></li><li data-type='method'><a href="wsemi.html#.isStrHasLowerCase">isStrHasLowerCase</a></li><li data-type='method'><a href="wsemi.html#.isStrHasNumber">isStrHasNumber</a></li><li data-type='method'><a href="wsemi.html#.isUserIdentify">isUserIdentify</a></li><li data-type='method'><a href="wsemi.html#.isUserName">isUserName</a></li><li data-type='method'><a href="wsemi.html#.isUserPW">isUserPW</a></li><li data-type='method'><a href="wsemi.html#.isWindow">isWindow</a></li><li data-type='method'><a href="wsemi.html#.isab">isab</a></li><li data-type='method'><a href="wsemi.html#.isarr">isarr</a></li><li data-type='method'><a href="wsemi.html#.isarr0">isarr0</a></li><li data-type='method'><a href="wsemi.html#.isblob">isblob</a></li><li data-type='method'><a href="wsemi.html#.isbol">isbol</a></li><li data-type='method'><a href="wsemi.html#.isday">isday</a></li><li data-type='method'><a href="wsemi.html#.isearr">isearr</a></li><li data-type='method'><a href="wsemi.html#.iseobj">iseobj</a></li><li data-type='method'><a href="wsemi.html#.iser">iser</a></li><li data-type='method'><a href="wsemi.html#.isernot">isernot</a></li><li data-type='method'><a href="wsemi.html#.isestr">isestr</a></li><li data-type='method'><a href="wsemi.html#.isfun">isfun</a></li><li data-type='method'><a href="wsemi.html#.isint">isint</a></li><li data-type='method'><a href="wsemi.html#.ismonth">ismonth</a></li><li data-type='method'><a href="wsemi.html#.isn0int">isn0int</a></li><li data-type='method'><a href="wsemi.html#.isn0num">isn0num</a></li><li data-type='method'><a href="wsemi.html#.isnbr">isnbr</a></li><li data-type='method'><a href="wsemi.html#.isnint">isnint</a></li><li data-type='method'><a href="wsemi.html#.isnnum">isnnum</a></li><li data-type='method'><a href="wsemi.html#.isnull">isnull</a></li><li data-type='method'><a href="wsemi.html#.isnum">isnum</a></li><li data-type='method'><a href="wsemi.html#.isobj">isobj</a></li><li data-type='method'><a href="wsemi.html#.isobj0">isobj0</a></li><li data-type='method'><a href="wsemi.html#.isp0int">isp0int</a></li><li data-type='method'><a href="wsemi.html#.isp0num">isp0num</a></li><li data-type='method'><a href="wsemi.html#.ispint">ispint</a></li><li data-type='method'><a href="wsemi.html#.ispm">ispm</a></li><li data-type='method'><a href="wsemi.html#.ispnum">ispnum</a></li><li data-type='method'><a href="wsemi.html#.isstr">isstr</a></li><li data-type='method'><a href="wsemi.html#.isstr0">isstr0</a></li><li data-type='method'><a href="wsemi.html#.istime">istime</a></li><li data-type='method'><a href="wsemi.html#.istimeTZ">istimeTZ</a></li><li data-type='method'><a href="wsemi.html#.istimems">istimems</a></li><li data-type='method'><a href="wsemi.html#.istimemsTZ">istimemsTZ</a></li><li data-type='method'><a href="wsemi.html#.isu16arr">isu16arr</a></li><li data-type='method'><a href="wsemi.html#.isu8arr">isu8arr</a></li><li data-type='method'><a href="wsemi.html#.isundefined">isundefined</a></li><li data-type='method'><a href="wsemi.html#.j2o">j2o</a></li><li data-type='method'><a href="wsemi.html#.keysmat2ltdt">keysmat2ltdt</a></li><li data-type='method'><a href="wsemi.html#.log">log</a></li><li data-type='method'><a href="wsemi.html#.ltdt2vrtsable">ltdt2vrtsable</a></li><li data-type='method'><a href="wsemi.html#.ltdtDiff">ltdtDiff</a></li><li data-type='method'><a href="wsemi.html#.ltdtDiffByKey">ltdtDiffByKey</a></li><li data-type='method'><a href="wsemi.html#.ltdtkeys2mat">ltdtkeys2mat</a></li><li data-type='method'><a href="wsemi.html#.ltdtkeysheads2mat">ltdtkeysheads2mat</a></li><li data-type='method'><a href="wsemi.html#.ltdtmapping">ltdtmapping</a></li><li data-type='method'><a href="wsemi.html#.ltdtmerge">ltdtmerge</a></li><li data-type='method'><a href="wsemi.html#.ltdtpick">ltdtpick</a></li><li data-type='method'><a href="wsemi.html#.ltdtpull">ltdtpull</a></li><li data-type='method'><a href="wsemi.html#.mat2ltdt">mat2ltdt</a></li><li data-type='method'><a href="wsemi.html#.matConcat">matConcat</a></li><li data-type='method'><a href="wsemi.html#.matDiff">matDiff</a></li><li data-type='method'><a href="wsemi.html#.matat">matat</a></li><li data-type='method'><a href="wsemi.html#.now2str">now2str</a></li><li data-type='method'><a href="wsemi.html#.now2strp">now2strp</a></li><li data-type='method'><a href="wsemi.html#.nowDay2str">nowDay2str</a></li><li data-type='method'><a href="wsemi.html#.nowms2str">nowms2str</a></li><li data-type='method'><a href="wsemi.html#.nowms2strp">nowms2strp</a></li><li data-type='method'><a href="wsemi.html#.o2j">o2j</a></li><li data-type='method'><a href="wsemi.html#.obj2b64">obj2b64</a></li><li data-type='method'><a href="wsemi.html#.obj2pb64">obj2pb64</a></li><li data-type='method'><a href="wsemi.html#.obj2str">obj2str</a></li><li data-type='method'><a href="wsemi.html#.obj2stru8arr">obj2stru8arr</a></li><li data-type='method'><a href="wsemi.html#.obj2u8arr">obj2u8arr</a></li><li data-type='method'><a href="wsemi.html#.objSortBy">objSortBy</a></li><li data-type='method'><a href="wsemi.html#.objSortByKeys">objSortByKeys</a></li><li data-type='method'><a href="wsemi.html#.ocr">ocr</a></li><li data-type='method'><a href="wsemi.html#.ocrDyn">ocrDyn</a></li><li data-type='method'><a href="wsemi.html#.oo">oo</a></li><li data-type='method'><a href="wsemi.html#.openLink">openLink</a></li><li data-type='method'><a href="wsemi.html#.pb642obj">pb642obj</a></li><li data-type='method'><a href="wsemi.html#.pmChain">pmChain</a></li><li data-type='method'><a href="wsemi.html#.pmConvertResolve">pmConvertResolve</a></li><li data-type='method'><a href="wsemi.html#.pmHook">pmHook</a></li><li data-type='method'><a href="wsemi.html#.pmHookReject">pmHookReject</a></li><li data-type='method'><a href="wsemi.html#.pmIni">pmIni</a></li><li data-type='method'><a href="wsemi.html#.pmInvResolve">pmInvResolve</a></li><li data-type='method'><a href="wsemi.html#.pmMap">pmMap</a></li><li data-type='method'><a href="wsemi.html#.pmQueue">pmQueue</a></li><li data-type='method'><a href="wsemi.html#.pmSeries">pmSeries</a></li><li data-type='method'><a href="wsemi.html#.pmThrottle">pmThrottle</a></li><li data-type='method'><a href="wsemi.html#.pseudoRandom">pseudoRandom</a></li><li data-type='method'><a href="wsemi.html#.pseudoRandomIntRange">pseudoRandomIntRange</a></li><li data-type='method'><a href="wsemi.html#.pseudoRandomRange">pseudoRandomRange</a></li><li data-type='method'><a href="wsemi.html#.queue">queue</a></li><li data-type='method'><a href="wsemi.html#.rang">rang</a></li><li data-type='method'><a href="wsemi.html#.rep">rep</a></li><li data-type='method'><a href="wsemi.html#.repObj">repObj</a></li><li data-type='method'><a href="wsemi.html#.replace">replace</a></li><li data-type='method'><a href="wsemi.html#.replaceObj">replaceObj</a></li><li data-type='method'><a href="wsemi.html#.replacePlus">replacePlus</a></li><li data-type='method'><a href="wsemi.html#.round">round</a></li><li data-type='method'><a href="wsemi.html#.secd">secd</a></li><li data-type='method'><a href="wsemi.html#.sep">sep</a></li><li data-type='method'><a href="wsemi.html#.sepInt">sepInt</a></li><li data-type='method'><a href="wsemi.html#.sind">sind</a></li><li data-type='method'><a href="wsemi.html#.split">split</a></li><li data-type='method'><a href="wsemi.html#.str2aes">str2aes</a></li><li data-type='method'><a href="wsemi.html#.str2b64">str2b64</a></li><li data-type='method'><a href="wsemi.html#.str2hint">str2hint</a></li><li data-type='method'><a href="wsemi.html#.str2md5">str2md5</a></li><li data-type='method'><a href="wsemi.html#.str2obj">str2obj</a></li><li data-type='method'><a href="wsemi.html#.str2sha512">str2sha512</a></li><li data-type='method'><a href="wsemi.html#.str2u8arr">str2u8arr</a></li><li data-type='method'><a href="wsemi.html#.strCompare">strCompare</a></li><li data-type='method'><a href="wsemi.html#.strDiff">strDiff</a></li><li data-type='method'><a href="wsemi.html#.strFindFuzz">strFindFuzz</a></li><li data-type='method'><a href="wsemi.html#.strFindFuzzDyn">strFindFuzzDyn</a></li><li data-type='method'><a href="wsemi.html#.strFindSimilar">strFindSimilar</a></li><li data-type='method'><a href="wsemi.html#.strdelleft">strdelleft</a></li><li data-type='method'><a href="wsemi.html#.strdelright">strdelright</a></li><li data-type='method'><a href="wsemi.html#.strleft">strleft</a></li><li data-type='method'><a href="wsemi.html#.strmid">strmid</a></li><li data-type='method'><a href="wsemi.html#.strright">strright</a></li><li data-type='method'><a href="wsemi.html#.stru8arr2obj">stru8arr2obj</a></li><li data-type='method'><a href="wsemi.html#.tand">tand</a></li><li data-type='method'><a href="wsemi.html#.time2day">time2day</a></li><li data-type='method'><a href="wsemi.html#.time2hour">time2hour</a></li><li data-type='method'><a href="wsemi.html#.time2min">time2min</a></li><li data-type='method'><a href="wsemi.html#.timeTZ2day">timeTZ2day</a></li><li data-type='method'><a href="wsemi.html#.timeTZ2expire">timeTZ2expire</a></li><li data-type='method'><a href="wsemi.html#.timeTZ2hour">timeTZ2hour</a></li><li data-type='method'><a href="wsemi.html#.timeTZ2min">timeTZ2min</a></li><li data-type='method'><a href="wsemi.html#.timeTZ2past">timeTZ2past</a></li><li data-type='method'><a href="wsemi.html#.timems2day">timems2day</a></li><li data-type='method'><a href="wsemi.html#.timems2hour">timems2hour</a></li><li data-type='method'><a href="wsemi.html#.timems2min">timems2min</a></li><li data-type='method'><a href="wsemi.html#.timems2time">timems2time</a></li><li data-type='method'><a href="wsemi.html#.timemsTZ2day">timemsTZ2day</a></li><li data-type='method'><a href="wsemi.html#.timemsTZ2expire">timemsTZ2expire</a></li><li data-type='method'><a href="wsemi.html#.timemsTZ2hour">timemsTZ2hour</a></li><li data-type='method'><a href="wsemi.html#.timemsTZ2min">timemsTZ2min</a></li><li data-type='method'><a href="wsemi.html#.timemsTZ2past">timemsTZ2past</a></li><li data-type='method'><a href="wsemi.html#.timemsTZ2time">timemsTZ2time</a></li><li data-type='method'><a href="wsemi.html#.treeObj">treeObj</a></li><li data-type='method'><a href="wsemi.html#.treeToFilepath">treeToFilepath</a></li><li data-type='method'><a href="wsemi.html#.trim">trim</a></li><li data-type='method'><a href="wsemi.html#.u16arr2b64">u16arr2b64</a></li><li data-type='method'><a href="wsemi.html#.u16arr2u8arr">u16arr2u8arr</a></li><li data-type='method'><a href="wsemi.html#.u8arr2ab">u8arr2ab</a></li><li data-type='method'><a href="wsemi.html#.u8arr2b64">u8arr2b64</a></li><li data-type='method'><a href="wsemi.html#.u8arr2blob">u8arr2blob</a></li><li data-type='method'><a href="wsemi.html#.u8arr2bs">u8arr2bs</a></li><li data-type='method'><a href="wsemi.html#.u8arr2obj">u8arr2obj</a></li><li data-type='method'><a href="wsemi.html#.u8arr2str">u8arr2str</a></li><li data-type='method'><a href="wsemi.html#.u8arr2u16arr">u8arr2u16arr</a></li><li data-type='method'><a href="wsemi.html#.urlParse">urlParse</a></li><li data-type='method'><a href="wsemi.html#.verifyValue">verifyValue</a></li><li data-type='method'><a href="wsemi.html#.waitFun">waitFun</a></li></ul></li></ul>
</nav>
<div id="main">
<h1 class="page-title">strDiff.mjs</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>import * as Diff from 'diff'
import get from 'lodash/get'
import split from 'lodash/split'
import take from 'lodash/take'
import size from 'lodash/size'
import isstr from './isstr.mjs'
import isbol from './isbol.mjs'
// console.log('Diff', Diff)
/**
* 比對新舊文字差異處
*
* Unit Test: {@link https://github.com/yuda-lyu/wsemi/blob/master/test/strDiff.test.mjs Github}
* @memberOf wsemi
* @param {String} strOld 輸入原始文字字串
* @param {String} strNew 輸入更新文字字串
* @param {Object} [opt={}] 輸入設定物件,預設{}
* @param {Boolean} [opt.eliminateEndLine=false] 輸入是否清除diff最後解析結果布林值,通常為處理數據時因各列有自動添加換行符號,導致diff會多出額外比對結果故須清除。預設false
* @returns {Object} 回傳比對結果物件,包含diff與dfs鍵值,diff為比對原始結果字串,dfs為依照各列比對結果陣列
* @example
*
* let r
*
* r = strDiff('test中文', '')
* console.log(r)
* // => {
* // diff: [ { count: 1, added: undefined, removed: true, value: 'test中文' } ],
* // dfs: [ { p: 'remove', vo: 'test中文', vn: '' } ]
* // }
*
* r = strDiff('test中文1\ntest中文2', '')
* console.log(r)
* // => {
* // diff: [
* // {
* // count: 2,
* // added: undefined,
* // removed: true,
* // value: 'test中文1\ntest中文2'
* // }
* // ],
* // dfs: [
* // { p: 'remove', vo: 'test中文1', vn: '' },
* // { p: 'remove', vo: 'test中文2', vn: '' }
* // ]
* // }
*
* r = strDiff('', 'test中文')
* console.log(r)
* // => {
* // diff: [ { count: 1, added: true, removed: undefined, value: 'test中文' } ],
* // dfs: [ { p: 'add', vo: 'test中文', vn: '' } ]
* // }
*
* r = strDiff('', 'test中文1\ntest中文2')
* console.log(r)
* // => {
* // diff: [
* // {
* // count: 2,
* // added: true,
* // removed: undefined,
* // value: 'test中文1\ntest中文2'
* // }
* // ],
* // dfs: [
* // { p: 'add', vo: 'test中文1', vn: '' },
* // { p: 'add', vo: 'test中文2', vn: '' }
* // ]
* // }
*
* let tab1 = `1|0.974848293|0.791303871|0.716898185|0.506002098|0.137888903|0.626724085
* 2|-0.529408622|0.839882385|0.663059856|0.49047221|0.395763265|0.866151835
* 3|-0.10320217|0.475514539|0.969205779|0.711250309|0.153847069|0.410092395
* 4|-0.121479865|0.486179086|0.481023842|0.467410582|0.42602231|0.849701641
* 5|0.757346003|0.697242433|0.67532802|0.174644416|0.045652267|0.397104668
* 6|0.663032731|0.259252779|0.566177431|0.679637706|0.377814487|0.400248119
* 7|0.72721374|0.263793391|0.167895215|0.794808602|0.107070584|0.011822872
* 8|0.247416664|0.360426795|0.014346373|0.000469616|0.4082693|0.913806611
* 9|0.345880037|0.167996664|0.711054429|0.363177921|0.206849994|0.636855344
* 10|0.576739457|0.324665077|0.973218005|0.883927423|0.176906125|0.20087887
* 11|a1
* 12|a2
* 13|0.504421248|0.984003751|0.32549507|0.987090751|0.192745589|0.735133561
* 14|0.273214614|0.083431884|0.565146092|0.935388666|0.637675154|0.523815661
*
* `
* let tab2 = `1|0.974848293|0.791303871|0.716898185|0.506002098|0.137888903|0.626724085
* 2|-0.529408622|a0.839882385|0.663059856|0.49047221|0.395763265|0.866151835
* 3|-0.10320217|0.475514539|0.969205779|0.711250309|0.153847069|0.410092395
* 4|-0.121479865|0.486179086|0.481023842|0.467410582|0.42602231|0.849701641
* 5|0.757346003|0.697242433|0.67532802|0.174644416|0.045652267|0.397104668
* 7|0.72721374|0.263793391|0.167895215|0.794808602|0.107070584|0.011822872
* 8|0.247416664|0.360426795|0.014346373|0.000469616|0.4082693|0.913806611
* 9|0.345880037|0.167996664|0.711054429|0.363173478|0.636855344
* 10|0.576739457|0.324665077|0.973218005|0.883927423|0.176906125|0.20087887
* 13|0.504421248|0.984003751|0.32549507|0.987090751|0.192745589|0.735133561
* 14|0.273214614|0.083431884|0.565146092|0.935388666|0.637675154|0.523815661
* n1|0.944492151|0.89950443|0.182709318|0.892820757|0.709746901|0.097385354
* n2|0.769805921|0.061355308|0.314826137|0.855857651|0.653550539|0.772500773
* n3|0.158739038|0.085078711|0.844664253|0.21630142|0.912931341|0.735138313
*
*
* `
* r = strDiff(tab1, tab2)
* console.log(r)
* // => {
* // diff: [
* // {
* // count: 1,
* // value: '1|0.974848293|0.791303871|0.716898185|0.506002098|0.137888903|0.626724085\n'
* // },
* // {
* // count: 1,
* // added: undefined,
* // removed: true,
* // value: '2|-0.529408622|0.839882385|0.663059856|0.49047221|0.395763265|0.866151835\n'
* // },
* // {
* // count: 1,
* // added: true,
* // removed: undefined,
* // value: '2|-0.529408622|a0.839882385|0.663059856|0.49047221|0.395763265|0.866151835\n'
* // },
* // {
* // count: 3,
* // value: '3|-0.10320217|0.475514539|0.969205779|0.711250309|0.153847069|0.410092395\n' +
* // '4|-0.121479865|0.486179086|0.481023842|0.467410582|0.42602231|0.849701641\n' +
* // '5|0.757346003|0.697242433|0.67532802|0.174644416|0.045652267|0.397104668\n'
* // },
* // {
* // count: 1,
* // added: undefined,
* // removed: true,
* // value: '6|0.663032731|0.259252779|0.566177431|0.679637706|0.377814487|0.400248119\n'
* // },
* // {
* // count: 2,
* // value: '7|0.72721374|0.263793391|0.167895215|0.794808602|0.107070584|0.011822872\n' +
* // '8|0.247416664|0.360426795|0.014346373|0.000469616|0.4082693|0.913806611\n'
* // },
* // {
* // count: 1,
* // added: undefined,
* // removed: true,
* // value: '9|0.345880037|0.167996664|0.711054429|0.363177921|0.206849994|0.636855344\n'
* // },
* // {
* // count: 1,
* // added: true,
* // removed: undefined,
* // value: '9|0.345880037|0.167996664|0.711054429|0.363173478|0.636855344\n'
* // },
* // {
* // count: 1,
* // value: '10|0.576739457|0.324665077|0.973218005|0.883927423|0.176906125|0.20087887\n'
* // },
* // {
* // count: 2,
* // added: undefined,
* // removed: true,
* // value: '11|a1\n12|a2\n'
* // },
* // {
* // count: 2,
* // value: '13|0.504421248|0.984003751|0.32549507|0.987090751|0.192745589|0.735133561\n' +
* // '14|0.273214614|0.083431884|0.565146092|0.935388666|0.637675154|0.523815661\n'
* // },
* // {
* // count: 3,
* // added: true,
* // removed: undefined,
* // value: 'n1|0.944492151|0.89950443|0.182709318|0.892820757|0.709746901|0.097385354\n' +
* // 'n2|0.769805921|0.061355308|0.314826137|0.855857651|0.653550539|0.772500773\n' +
* // 'n3|0.158739038|0.085078711|0.844664253|0.21630142|0.912931341|0.735138313\n'
* // },
* // { count: 1, value: '\n' },
* // { count: 1, added: true, removed: undefined, value: '\n' }
* // ],
* // dfs: [
* // {
* // p: '',
* // vo: '1|0.974848293|0.791303871|0.716898185|0.506002098|0.137888903|0.626724085',
* // vn: ''
* // },
* // {
* // p: 'modify',
* // vo: '2|-0.529408622|0.839882385|0.663059856|0.49047221|0.395763265|0.866151835',
* // vn: '2|-0.529408622|a0.839882385|0.663059856|0.49047221|0.395763265|0.866151835'
* // },
* // {
* // p: '',
* // vo: '3|-0.10320217|0.475514539|0.969205779|0.711250309|0.153847069|0.410092395',
* // vn: ''
* // },
* // {
* // p: '',
* // vo: '4|-0.121479865|0.486179086|0.481023842|0.467410582|0.42602231|0.849701641',
* // vn: ''
* // },
* // {
* // p: '',
* // vo: '5|0.757346003|0.697242433|0.67532802|0.174644416|0.045652267|0.397104668',
* // vn: ''
* // },
* // {
* // p: 'remove',
* // vo: '6|0.663032731|0.259252779|0.566177431|0.679637706|0.377814487|0.400248119',
* // vn: ''
* // },
* // {
* // p: '',
* // vo: '7|0.72721374|0.263793391|0.167895215|0.794808602|0.107070584|0.011822872',
* // vn: ''
* // },
* // {
* // p: '',
* // vo: '8|0.247416664|0.360426795|0.014346373|0.000469616|0.4082693|0.913806611',
* // vn: ''
* // },
* // {
* // p: 'modify',
* // vo: '9|0.345880037|0.167996664|0.711054429|0.363177921|0.206849994|0.636855344',
* // vn: '9|0.345880037|0.167996664|0.711054429|0.363173478|0.636855344'
* // },
* // {
* // p: '',
* // vo: '10|0.576739457|0.324665077|0.973218005|0.883927423|0.176906125|0.20087887',
* // vn: ''
* // },
* // { p: 'remove', vo: '11|a1', vn: '' },
* // { p: 'remove', vo: '12|a2', vn: '' },
* // {
* // p: '',
* // vo: '13|0.504421248|0.984003751|0.32549507|0.987090751|0.192745589|0.735133561',
* // vn: ''
* // },
* // {
* // p: '',
* // vo: '14|0.273214614|0.083431884|0.565146092|0.935388666|0.637675154|0.523815661',
* // vn: ''
* // },
* // {
* // p: 'add',
* // vo: 'n1|0.944492151|0.89950443|0.182709318|0.892820757|0.709746901|0.097385354',
* // vn: ''
* // },
* // {
* // p: 'add',
* // vo: 'n2|0.769805921|0.061355308|0.314826137|0.855857651|0.653550539|0.772500773',
* // vn: ''
* // },
* // {
* // p: 'add',
* // vo: 'n3|0.158739038|0.085078711|0.844664253|0.21630142|0.912931341|0.735138313',
* // vn: ''
* // },
* // { p: '', vo: '', vn: '' },
* // { p: 'add', vo: '', vn: '' }
* // ]
* // }
*
*/
function strDiff(strOld, strNew, opt = {}) {
//check
if (!isstr(strOld)) {
return {}
}
if (!isstr(strNew)) {
return {}
}
if (strOld === '' && strNew === '') {
return {}
}
//eliminateEndLine
let eliminateEndLine = get(opt, 'eliminateEndLine')
if (!isbol(eliminateEndLine)) {
eliminateEndLine = false
}
// console.log('strDiff strOld', strOld)
// console.log('strDiff strNew', strNew)
//diffLines
let diff = Diff.diffLines(strOld, strNew)
// console.log('diff', diff)
//k
let k
//dfsOld, dfsNew
let n = size(diff)
let dfsOld = []
let dfsNew = []
k = -1
while (true) {
k++
if (k > n - 1) {
break
}
//s
let s = diff[k]
//count, removed, added
let count = get(s, 'count', 0)
let removed = get(s, 'removed', false)
let added = get(s, 'added', false)
//vs
let v = get(s, 'value', '')
let vs = split(v, '\n')
vs = take(vs, count)
//each
for (let i = 1; i <= count; i++) {
let v = vs[i - 1]
if (!removed && !added) { //不變line
dfsOld.push({
p: '',
v,
})
dfsNew.push({
p: '',
v,
})
}
else if (removed && !added) { //有刪除line
dfsOld.push({
p: 'remove',
v,
})
dfsNew.push({
p: 'empty',
v: '',
})
}
else if (!removed && added) { //有新增line
dfsOld.push({
p: 'empty',
v: '',
})
dfsNew.push({
p: 'add',
v,
})
}
}
}
// console.log('dfsOld(分開彙整)', dfsOld)
// console.log('dfsNew(分開彙整)', dfsNew)
// each(dfsOld, (_, k) => {
// let vOld = get(dfsOld, k)
// let vNew = get(dfsNew, k)
// console.log('分開彙整', k, vOld, vNew)
// })
//nOld, nNew
let nOld = size(dfsOld)
// let nNew = size(dfsNew)
//merge dfsOld, dfsNew
let m = nOld //Math.max(nOld, nNew)
k = -1
while (true) {
k++
if (k > m - 1) {
break
}
//v0
let df0Old = get(dfsOld, k, null)
let df0New = get(dfsNew, k, null)
let p0Old = get(df0Old, 'p', '')
let p0New = get(df0New, 'p', '')
// let v0Old = get(df0Old, 'v', '')
// let v0New = get(df0New, 'v', '')
//偵測modify
if (p0Old === 'remove' && p0New === 'empty') {
let icOld = 0 //old出現連續可合併列數
let icOldStart = k
let icOldEnd = -1
for (let j = k; j <= m - 1; j++) {
let dfOld = get(dfsOld, j, null)
let dfNew = get(dfsNew, j, null)
let pOld = get(dfOld, 'p', '')
let pNew = get(dfNew, 'p', '')
if (pOld === 'remove' && pNew === 'empty') {
icOld++
icOldEnd = j
}
else {
break
}
}
if (icOld <= 0) {
continue
}
// console.log(k, 'icOld', icOld, 'from', icOldStart, `to`, icOldEnd)
let icNew = 0 //new出現連續可合併列數
let icNewState = false
let icNewStart = -1
let icNewEnd = -1
for (let j = k; j <= icOldEnd + icOld; j++) {
let dfOld = get(dfsOld, j, null)
let dfNew = get(dfsNew, j, null)
let pOld = get(dfOld, 'p', '')
let pNew = get(dfNew, 'p', '')
if (pOld === 'empty' && pNew === 'add') {
if (!icNewState) {
icNewStart = j
}
icNewState = true
icNew++
if (icNewState) {
icNewEnd = j
}
}
else if (icNewState) {
break
}
}
if (icNew <= 0) {
continue
}
// console.log(k, 'icNew', icNew, 'from', icNewStart, `to`, icNewEnd)
//ic
let ic = Math.min(icOld, icNew)
// console.log(k, 'ic', ic)
//combine
if (ic >= 1) {
for (let j = 0; j <= ic - 1; j++) {
let jOld = icOldStart + j
let jNew = icNewStart + j
dfsOld[jOld] = {
p: 'modify',
vo: get(dfsOld, `${jOld}.v`, ''),
vn: get(dfsNew, `${jNew}.v`, ''),
// b: true,
}
dfsNew[jOld] = null
dfsOld[jNew] = null
dfsNew[jNew] = null
}
k += ic + 1 //跳過ic行繼續偵測
}
}
else {
// dfsOld[k].b = true
// dfsNew[k].b = true
}
}
// console.log('dfsOld(偵測modify)', dfsOld)
// console.log('dfsNew(偵測modify)', dfsNew)
//dfs
let dfs = []
k = -1
while (true) {
k++
if (k > m - 1) {
break
}
let dfOld = get(dfsOld, k, null)
let dfNew = get(dfsNew, k, null)
let pOld = get(dfOld, 'p', '')
let pNew = get(dfNew, 'p', '')
let vOld = get(dfOld, 'v', '')
let vNew = get(dfNew, 'v', '')
//check
if (dfOld === null && dfNew === null) {
continue
}
let p = ''
let vo = vOld
let vn = ''
if (pOld === 'modify') {
p = 'modify'
vo = dfOld.vo
vn = dfOld.vn
}
else if (pOld === 'remove' && pNew === 'empty') {
p = 'remove'
vo = vOld
vn = ''
}
else if (pOld === 'empty' && pNew === 'add') {
p = 'add'
vo = vNew
vn = ''
}
dfs.push({
p,
vo,
vn,
// _dfOld: dfOld,
// _dfNew: dfNew,
})
}
// console.log('dfs', dfs)
return {
diff,
dfs,
}
}
export default strDiff
</code></pre>
</article>
</section>
</div>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Wed Jul 19 2023 23:38:49 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
</footer>
<script>prettyPrint();</script>
<script src="scripts/polyfill.js"></script>
<script src="scripts/linenumber.js"></script>
</body>
</html>