整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          html文件刪除如何恢復(fù)?恢復(fù)誤刪html文件教程

          tml文件即超文本標(biāo)記語(yǔ)言文件文檔,是擴(kuò)展名、后綴名為html的文件。超文本標(biāo)記語(yǔ)言的結(jié)構(gòu)包括頭部分(Head)、和主體部分(Body),其中頭部(head)提供關(guān)于網(wǎng)頁(yè)的信息,主體(body)部分提供網(wǎng)頁(yè)的具體內(nèi)容。html文件能夠被多種網(wǎng)頁(yè)瀏覽器讀取,傳遞。我們可以使用電腦上自帶的記事本進(jìn)行編輯htm文件。那么html文件刪除如何恢復(fù)?

          通常情況下當(dāng)您從電腦存儲(chǔ)設(shè)備中刪除html文件時(shí),該html文件會(huì)保存在回收站中。 可以根據(jù)需要通過(guò)單擊還原選項(xiàng)將其還原。 但是不好運(yùn)的情況下,如果您清空回收站或文件未經(jīng)過(guò)回收站、或使用永久刪除鍵Shift + Delete將文件刪除怎么恢復(fù)呢?我們可以通過(guò)使用數(shù)據(jù)恢復(fù)軟件來(lái)恢復(fù)。

          html文件刪除恢復(fù)步驟如下:

          1、首先到官網(wǎng)下載并安裝好云騎士數(shù)據(jù)恢復(fù)軟件(注意:軟件不能安裝在丟失盤中),打開(kāi)云騎士數(shù)據(jù)恢復(fù)軟件,根據(jù)需要選擇恢復(fù)功能,這里選擇場(chǎng)景模式下的誤刪除文件。

          2、選擇好以后選擇需要恢復(fù)數(shù)據(jù)的分區(qū),如果是外接設(shè)備則可以將它插入電腦中,或者通過(guò)讀卡器插入電腦,點(diǎn)擊開(kāi)始掃描。

          3、掃描結(jié)束以后,你會(huì)發(fā)現(xiàn)有很多數(shù)據(jù),這時(shí)我們可以通過(guò)文件類型進(jìn)行查找,這里勾選其他文件類型,然后找到了需要的html格式文件。

          因?yàn)槲募G失后有可能會(huì)因各種原因受損,所以遵循先預(yù)覽再恢復(fù)原則,通過(guò)預(yù)覽模式判斷文件是否正常再進(jìn)行恢復(fù)。對(duì)于無(wú)法預(yù)覽或者不支持預(yù)覽的是無(wú)法判斷數(shù)據(jù)是好的還是壞的,只能恢復(fù)出來(lái)才能進(jìn)行查看的。

          4、接著在需要恢復(fù)的html文件前面進(jìn)行勾選,選擇好以后點(diǎn)擊立即恢復(fù)按鈕。

          5、彈出設(shè)置文件路徑窗口,將文件存儲(chǔ)在安全區(qū)域中(如果存儲(chǔ)盤不夠內(nèi)存,可以外接其他設(shè)備進(jìn)行存儲(chǔ)),點(diǎn)擊確定按鈕。

          6、耐心等待文件導(dǎo)出完成,點(diǎn)擊查看即可查看恢復(fù)出來(lái)的html文件了。

          知識(shí)普及:

          導(dǎo)致html文件丟失常見(jiàn)幾種原因:

          采用來(lái)源于Internet的各種各樣沒(méi)經(jīng)驗(yàn)證的第三方應(yīng)用程序也許會(huì)使您的html文件遭遇風(fēng)險(xiǎn)。

          偶爾在下載那些應(yīng)用程序時(shí),某些惡意病毒也許會(huì)進(jìn)入系統(tǒng)并破壞html文件結(jié)構(gòu),亦或它們也許會(huì)刪除桌面上的所有html文件,因此致使大量數(shù)據(jù)丟失。

          在重新分區(qū)或調(diào)整硬盤大小時(shí),那些html文件也許會(huì)遺失。在重新分區(qū)時(shí),一個(gè)重大的錯(cuò)誤也會(huì)刪除存儲(chǔ)了所必需文件的分區(qū),例如DOC、PPT、XLSX和HTML。

          總結(jié):以上就是html文件刪除恢復(fù)教程了,如果在軟件使用過(guò)程中有不懂的問(wèn)題,可以咨詢專業(yè)的在線客服人員為您解答~

          本文來(lái)自 yqssjhf.com>> 創(chuàng)作不易,轉(zhuǎn)載請(qǐng)注明出處。

          常扒別人網(wǎng)站文章的坑們;我是指那種批量式采集的壓根不看內(nèi)容的;少不了都會(huì)用到刪除html標(biāo)簽的函數(shù);這里介紹3種不同用途上的方法;

          $str='<div><p>這里是p標(biāo)簽</p><img src="" alt="這里是img標(biāo)簽"><a href="">這里是a標(biāo)簽</a><br></div>';


          1:刪除全部或者保留指定html標(biāo)簽php自帶的函數(shù)strip_tags即可滿足要求,使用方法:strip_tags(string,allow);string:需要處理的字符串;allow:需要保留的指定標(biāo)簽,可以寫多個(gè);

          echo strip_tags($str,'<p><a>');//輸出:<p>這里是p標(biāo)簽</p><a href="">這里是a標(biāo)簽</a>


          此函數(shù)的優(yōu)點(diǎn)是簡(jiǎn)單粗暴;但是缺點(diǎn)也很明顯;如果有一大堆標(biāo)簽;而我只是想刪除指定的某一個(gè);那要寫很多需要保留的標(biāo)簽;所以有了第二個(gè)方法;

          2:刪除指定的html標(biāo)簽使用方法:strip_html_tags($tags,$str);$tags:需要?jiǎng)h除的標(biāo)簽(數(shù)組格式)$str:需要處理的字符串;

          function strip_html_tags($tags,$str){
              $html=array();
              foreach ($tags as $tag) {
                  $html[]="/(<(?:\/".$tag."|".$tag.")[^>]*>)/i";
              }
              $data=preg_replace($html, '', $str);
              return $data;
          }
          echo strip_html_tags(array('p','img'),$str);
          //輸出:<div>這里是p標(biāo)簽<a href="">這里是a標(biāo)簽</a><br></div>;

          3:刪除標(biāo)簽和標(biāo)簽的內(nèi)容使用方法:strip_html_tags($tags,$str);$tags:需要?jiǎng)h除的標(biāo)簽(數(shù)組格式)$str:需要處理的字符串;

          function strip_html_tags($tags,$str){
              $html=array();
              foreach ($tags as $tag) {
                  $html[]='/<'.$tag.'.*?>[\s|\S]*?<\/'.$tag.'>/';
                  $html[]='/<'.$tag.'.*?>/';
              }
              $data=preg_replace($html,'',$str);
              return $data;
          }
          echo strip_html_tags(array('a','img'),$str);
          //輸出<div><p>這里是p標(biāo)簽</p><br></div>

          很多網(wǎng)站文章里面會(huì)帶上網(wǎng)站名和鏈接;這個(gè)函數(shù)就是專治這種;別拿這個(gè)函數(shù)采集本站啊;不然保證不打死你;4:終極函數(shù),刪除指定標(biāo)簽;刪除或者保留標(biāo)簽內(nèi)的內(nèi)容;使用方法:strip_html_tags($tags,$str,$content);$tags:需要?jiǎng)h除的標(biāo)簽(數(shù)組格式)$str:需要處理的字符串;$ontent:是否刪除標(biāo)簽內(nèi)的內(nèi)容 0保留內(nèi)容 1不保留內(nèi)容

          日常編程中,我們經(jīng)常會(huì)遇到數(shù)組去重的問(wèn)題。今天,我們就來(lái)聊聊如何用JavaScript來(lái)優(yōu)雅地解決這個(gè)問(wèn)題。

          問(wèn)題描述

          給定一個(gè)包含重復(fù)元素的數(shù)組,我們希望創(chuàng)建一個(gè)新的數(shù)組,其中只包含原始數(shù)組中的唯一值。例如,如果我們有一個(gè)數(shù)組 [1, 2, 3, 2, 4, 1, 5],期望的輸出應(yīng)該是 [1, 2, 3, 4, 5]

          方法一:最原始的方法

          我們可以使用最簡(jiǎn)單的方法——嵌套循環(huán)來(lái)解決這個(gè)問(wèn)題。遍歷每一個(gè)元素,檢查它是否已經(jīng)存在于新數(shù)組中,如果不存在則添加進(jìn)去。

          function removeDuplicates(arr) {
            const result = [];
            for (let i = 0; i < arr.length; i++) {
              let isDuplicate = false;
              for (let j = 0; j < result.length; j++) {
                if (arr[i] === result[j]) {
                  isDuplicate = true;
                  break;
                }
              }
              if (!isDuplicate) {
                result.push(arr[i]);
              }
            }
            return result;
          }
          const myArray = [1, 2, 3, 2, 4, 1, 5];
          const uniqueArray = removeDuplicates(myArray);
          console.log(uniqueArray); // 輸出: [1, 2, 3, 4, 5]

          這個(gè)方法雖然直觀,但當(dāng)數(shù)組很大時(shí),效率會(huì)變得非常低,因?yàn)闀r(shí)間復(fù)雜度是 O(n2)。

          方法二:使用indexOf和filter方法

          我們還可以使用 indexOf 方法配合 filter 方法來(lái)去重,這樣看起來(lái)會(huì)簡(jiǎn)潔不少。

          function removeDuplicates(arr) {
            return arr.filter((item, pos) => arr.indexOf(item) === pos);
          }
          const myArray = [1, 2, 3, 2, 4, 1, 5];
          const uniqueArray = removeDuplicates(myArray);
          console.log(uniqueArray); // 輸出: [1, 2, 3, 4, 5]

          在這個(gè)方法中,我們使用 filter 方法創(chuàng)建了一個(gè)新數(shù)組,只有滿足條件的元素才會(huì)被包含進(jìn)來(lái)。條件是當(dāng)前元素的索引應(yīng)該等于該元素在數(shù)組中第一次出現(xiàn)的位置。這種方法代碼看起來(lái)更簡(jiǎn)潔,但是它的時(shí)間復(fù)雜度依然是 O(n2),因?yàn)?indexOf 需要遍歷整個(gè)數(shù)組來(lái)查找元素的位置。

          使用對(duì)象特性優(yōu)化

          在處理大數(shù)組去重時(shí),我們可以利用對(duì)象的特性來(lái)提升性能。通過(guò)在對(duì)象中記錄數(shù)組元素,可以有效減少重復(fù)元素的檢查次數(shù)。

          function removeDuplicates(arr) {
            const seen = {};
            return arr.filter((item) => {
              if (seen[item]) {
                return false;
              } else {
                seen[item] = true;
                return true;
              }
            });
          }
          const myArray = [1, 2, 3, 2, 4, 1, 5];
          const uniqueArray = removeDuplicates(myArray);
          console.log(uniqueArray); // 輸出: [1, 2, 3, 4, 5]

          這個(gè)方法創(chuàng)建了一個(gè)空對(duì)象 seen,然后通過(guò) filter 方法遍歷數(shù)組。每個(gè)元素都會(huì)檢查是否已存在于 seen 對(duì)象中。如果存在,則跳過(guò);否則,加入 seen 對(duì)象并保留在新數(shù)組中。這種方法對(duì)于大數(shù)組更高效,但存在一些缺點(diǎn):

          • 類型轉(zhuǎn)換:對(duì)象鍵只能是字符串或符號(hào),這導(dǎo)致數(shù)字和字符串形式的數(shù)字無(wú)法區(qū)分。例如,removeDuplicates([1, "1"]) 會(huì)返回 [1]。
          • 對(duì)象相等性:所有對(duì)象在這個(gè)解決方案中被認(rèn)為是相等的。例如,removeDuplicates([{foo: 1}, {foo: 2}]) 會(huì)返回 [{foo: 1}]。

          如果你的數(shù)組只包含基本類型,并且不需要區(qū)分類型,這可以放心使用這個(gè)方法。

          結(jié)合對(duì)象和數(shù)組的線性搜索

          我們可以結(jié)合對(duì)象和數(shù)組的線性搜索方法來(lái)解決上述問(wèn)題。

          function removeDuplicates(arr) {
            const prims = { boolean: {}, number: {}, string: {} };
            const objs = [];
            return arr.filter((item) => {
              const type = typeof item;
              if (type in prims) {
                if (prims[type].hasOwnProperty(item)) {
                  return false;
                } else {
                  prims[type][item] = true;
                  return true;
                }
              } else {
                if (objs.indexOf(item) >= 0) {
                  return false;
                } else {
                  objs.push(item);
                  return true;
                }
              }
            });
          }
          const myArray = [1, 2, 3, 2, 4, 1, 5, { foo: 1 }, { foo: 2 }];
          const uniqueArray = removeDuplicates(myArray);
          console.log(uniqueArray); // 輸出: [1, 2, 3, 4, 5, { foo: 1 }, { foo: 2 }]

          主要優(yōu)點(diǎn)

          • 分類存儲(chǔ):通過(guò)將基本類型和對(duì)象類型分別存儲(chǔ),減少了不同類型之間的沖突,邏輯清晰。
          • 高效處理基本類型:使用對(duì)象存儲(chǔ)基本類型,查找和存儲(chǔ)操作的時(shí)間復(fù)雜度為 O(1),效率較高。

          存在的問(wèn)題

          • 1、對(duì)象類型處理問(wèn)題:
            • 引用比較:代碼使用 indexOf 方法判斷對(duì)象是否存在于數(shù)組中,這實(shí)際上是比較對(duì)象的引用而不是內(nèi)容。即使兩個(gè)對(duì)象內(nèi)容相同,但引用不同,indexOf 也會(huì)返回 -1,導(dǎo)致內(nèi)容相同但引用不同的對(duì)象被認(rèn)為是不同的。例如,{ foo: 1 } 和另一個(gè) { foo: 1 } 會(huì)被當(dāng)作兩個(gè)不同的對(duì)象。
            • 性能問(wèn)題:對(duì)于大量對(duì)象類型的元素,由于 indexOf 方法需要遍歷整個(gè)數(shù)組,時(shí)間復(fù)雜度為 O(n),性能較差。
          • 2、不能深度比較:對(duì)于嵌套對(duì)象或數(shù)組,該方法無(wú)法進(jìn)行深度比較。例如,{ foo: [1, 2] } 和 { foo: [1, 2] } 這樣的對(duì)象,內(nèi)容相同但引用不同,會(huì)被認(rèn)為是不同的對(duì)象。

          最終方案:編寫深度比較函數(shù)

          編寫深度比較函數(shù) isDeepDataStructureEquality,用來(lái)比較兩個(gè)對(duì)象的內(nèi)容是否相同。

          function isDeepDataStructureEquality(a, b) {
              let isEqual = Object.is(a, b);
          
              if (!isEqual) {
                if (Array.isArray(a) && Array.isArray(b)) {
          
                  isEqual = (a.length === b.length) && a.every(
                    (item, idx) => isDeepDataStructureEquality(item, b[idx])
                  );
                } else if (
                  a && b
                  && (typeof a === 'object')
                  && (typeof b === 'object')
                ) {
                  const aKeys = Object.keys(a);
                  const bKeys = Object.keys(b);
          
                  isEqual = (aKeys.length === bKeys.length) && aKeys.every(
                    (key, idx) => isDeepDataStructureEquality(a[key], b[key])
                  );
                }
              }
              return isEqual;
            }
          
          function removeDuplicates(arr) {
            const primitives = { boolean: {}, number: {}, string: {} };
            const objs = [];
            return arr.filter(item => {
              const type = typeof item;
              if (type in primitives) {
                if (primitives[type].hasOwnProperty(item)) {
                  return false;
                } else {
                  primitives[type][item] = true;
                  return true;
                }
              } else {
                if (objs.some(obj => isDeepDataStructureEquality(obj, item))) {
                  return false;
                } else {
                  objs.push(item);
                  return true;
                }
              }
            });
          }

          方法三:排序去重

          另一種去重方法是先排序數(shù)組,然后去除連續(xù)重復(fù)的元素。

          function removeDuplicates(arr) {
            return arr.sort().filter((item, pos, ary) => !pos || item !== ary[pos - 1]);
          }
          const myArray = [1, 2, 3, 2, 4, 1, 5];
          const uniqueArray = removeDuplicates(myArray);
          console.log(uniqueArray); // 輸出: [1, 2, 3, 4, 5]

          這個(gè)方法首先使用 sort 方法對(duì)數(shù)組進(jìn)行排序,然后使用 filter 方法去除連續(xù)的重復(fù)元素。雖然對(duì)已排序的數(shù)組很有效,但無(wú)法處理對(duì)象數(shù)組。

          方法四:使用 Set 處理對(duì)象

          對(duì)于包含對(duì)象的數(shù)組,我們可以利用 Set 數(shù)據(jù)結(jié)構(gòu)來(lái)高效去重。因?yàn)?Set 只存儲(chǔ)唯一值,我們可以將數(shù)組轉(zhuǎn)換為 Set,然后再轉(zhuǎn)換回?cái)?shù)組。

          function removeDuplicates(arr) {
            return [...new Set(arr)];
          }
          const myArray = [1, 2, 3, 2, 4, 1, 5, { foo: 1 }, { foo: 2 }];
          const uniqueArray = removeDuplicates(myArray);
          console.log(uniqueArray); // 輸出: [1, 2, 3, 4, 5, { foo: 1 }, { foo: 2 }]

          這個(gè)方法通過(guò) new Set(arr) 創(chuàng)建一個(gè)新的集合,然后使用擴(kuò)展運(yùn)算符 ... 將集合展開(kāi)為數(shù)組,去重過(guò)程簡(jiǎn)單且高效。

          • 優(yōu)點(diǎn)
            • 簡(jiǎn)潔:代碼非常簡(jiǎn)潔,只需一行代碼即可實(shí)現(xiàn)數(shù)組去重。
            • 高效:Set 數(shù)據(jù)結(jié)構(gòu)在插入元素時(shí)自動(dòng)去重,性能較好,時(shí)間復(fù)雜度為 O(n)。
          • 存在的問(wèn)題
            • 對(duì)象引用問(wèn)題:Set 判斷元素是否相等時(shí),使用的是同一對(duì)象引用。例如,兩個(gè)內(nèi)容相同但引用不同的對(duì)象 { foo: 1 } 和 { foo: 1 } 會(huì)被視為不同的元素。

          總結(jié)

          在實(shí)際開(kāi)發(fā)中,選擇合適的數(shù)組去重方法非常重要。如果數(shù)組主要包含基本類型,使用 Set 是一種簡(jiǎn)潔高效的選擇。如果數(shù)組中包含復(fù)雜結(jié)構(gòu)的對(duì)象,可以結(jié)合深度比較函數(shù)來(lái)確保去重的準(zhǔn)確性。

          無(wú)論你選擇哪種方法,都要根據(jù)具體的應(yīng)用場(chǎng)景和數(shù)據(jù)特點(diǎn)來(lái)決定。希望這些方法能幫助你在實(shí)際開(kāi)發(fā)中更優(yōu)雅地解決數(shù)組去重問(wèn)題。如果你有其他更好的方法或建議,歡迎在評(píng)論區(qū)分享哦!

          如果你喜歡這篇文章,請(qǐng)點(diǎn)贊并關(guān)注,更多前端技巧和小妙招等著你哦!


          主站蜘蛛池模板: 日本一区二区在线| 国产伦理一区二区三区| 一区二区三区在线观看视频| 日产亚洲一区二区三区| 一区二区三区四区电影视频在线观看| 夜夜添无码一区二区三区| 国产aⅴ精品一区二区三区久久 | 亚洲色精品三区二区一区| 内射少妇一区27P| 日本一区二区三区免费高清| 日韩精品一区二区三区中文| 亚洲午夜精品第一区二区8050| 国产精品成人免费一区二区| 色窝窝无码一区二区三区成人网站| 国产福利电影一区二区三区久久老子无码午夜伦不 | 无码国产精品一区二区免费式直播| 亚洲色婷婷一区二区三区| 性色AV一区二区三区| 日韩亚洲AV无码一区二区不卡| 女同一区二区在线观看| 中文无码精品一区二区三区| 高清在线一区二区| 午夜视频久久久久一区| 日本一区中文字幕日本一二三区视频 | 国模大胆一区二区三区| 精品一区二区三区在线视频观看 | 人妻无码一区二区三区AV| 成人区人妻精品一区二区三区 | 亚洲色精品aⅴ一区区三区| 国精产品一区一区三区有限在线| 性色av一区二区三区夜夜嗨| 日本高清不卡一区| 国产精品视频一区二区猎奇| 九九无码人妻一区二区三区| 色综合久久一区二区三区| 国产一区在线观看免费| 亚洲成人一区二区| 一区二区不卡视频在线观看 | 少妇激情av一区二区| 亚洲av乱码一区二区三区 | 乱中年女人伦av一区二区|