<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          12個(gè)有用的 JavaScript 代碼片段

          共 6352字,需瀏覽 13分鐘

           ·

          2022-02-12 23:23

          英文 | https://javascript.plainenglish.io/6-javascript-code-snippets-for-sorting-arrays-56a7049f831

          翻譯 | 楊小愛


          在過(guò)去的幾個(gè)月里,我在開發(fā)離線瀏覽器工具時(shí),發(fā)現(xiàn)自己反復(fù)搜索我存儲(chǔ)的 .js 文件以檢索舊代碼片段。 
          因此,我為了提升工作效率,我把一些常用 JavaScript 方法的整理為了一個(gè)列表,作為自我工作與學(xué)習(xí)的參考清單,希望這個(gè)清單也會(huì)對(duì)您有所幫助。
          下面我們就開始今天的內(nèi)容吧。
          演示用例:查找“arr”的結(jié)果
          1、數(shù)值排序 | 升序 [???]
          const arr = [40, 100, 1, 5, 25, 10];arr.sort(function(a, b){  return a-b;});

          之前:[40,100,1,5,25,10]

          之后:[1,5,10,25,40,100]

          說(shuō)明:對(duì)于數(shù)字排序,必須創(chuàng)建一個(gè) Comparator 實(shí)體或比較函數(shù)。在上面的代碼片段中,這相當(dāng)于

          const compare = function(a, b){return a-b;};

          排序結(jié)果是

          arr.sort(compare);

          2、數(shù)值排序 | 降序 [???]

          const arr = [40, 100, 1, 5, 25, 10];arr.sort(function(a, b){return b-a; // swap the positions of a and b});

          之前:[40,100,1,5,25,10]

          之后:[100,40,25,10,5,1]

          3、 按字母排序 | 升序? [???]

          const arr = ["Blue", "Orange", "Aqua", "Marine"];arr.sort();

          之前:[“Blue”、“Orange”、“Aqua”、“Marine”]

          之后:[“Aqua”、“Blue”、“Marine”、“Orange”]

          按字母排序的行為在 JavaScript 中不太直觀。僅當(dāng)數(shù)組中的所有元素都被讀取為(類型)字符串時(shí),內(nèi)置的默認(rèn) sort() 函數(shù)才適用于 JavaScript 數(shù)組。

          4、按字母排序 | 降序? [???]

          const arr = ["Blue", "Orange", "Aqua", "Marine"];arr.sort().reverse();

          之前:[“Blue”、“Orange”、“Aqua”、“Marine”]

          之后:[“Orange”、“Marine”、“Blue”、“Aqua”]

          與僅適用于字符串實(shí)體的 sort() 函數(shù)不同,JavaScript 中的函數(shù) reverse() 適用于整個(gè)數(shù)組并交換元素的位置,而不管(類型)如何。第一個(gè)元素成為最后一個(gè)元素,反之亦然。

          5、日期排序 | 上升 [▲]

          const arr = ["2015-03-25", "2015-02-01", "2015-01-03", "2015-02-02"];arr.sort(function(a, b){return new Date(a)-new Date(b);});

          之前:[“2015–03–25”、”2015–02–01”、”2015–01–03”、”2015–02–02”]

          之后:[“2015–01–03”、”2015–02–01”、”2015–02–02”、”2015–03–25”]

          說(shuō)明:日期的排序行為與數(shù)字排序非常相似。但是,JavaScript 數(shù)組中的 String 實(shí)體必須首先被解析為 Date 對(duì)象,因?yàn)樗鼈兛梢愿鶕?jù)相對(duì) Date 出現(xiàn)進(jìn)行排序。

          6、日期排序 | 降序[▼]

          類似于數(shù)字排序…

          const arr = ["2015-03-25", "2015-02-01", "2015-01-03", "2015-02-02"];arr.sort(function(a, b){return new Date(b)-new Date(a); // swap the positions of a and b});

          之前:[“2015–03–25”、”2015–02–01”、”2015–01–03”、”2015–02–02”]

          之后:[“2015–03–25”、”2015–02–02”、”2015–02–01”、”2015–01–03”]

          7、通知未保存的更改

          window.addEventListener('beforeunload', (event) => {event.preventDefault();event.returnValue = '';});

          上面的代碼片段對(duì)于用戶在輸入字段中,輸入了未保存的數(shù)據(jù),并且,如果頁(yè)面被卸載,則對(duì)將丟失的情況特別有用。

          在上圖中,用戶上傳了多個(gè)圖像文件后,瀏覽器會(huì)提示用戶是否保存了圖像輸出,以防止數(shù)據(jù)丟失。

          8、 異步上傳多個(gè)文件

          function readFileAsB64(file) {return new Promise((resolve,reject) => {let fileredr = new FileReader();        fileredr.onload = () => resolve([fileredr.result, file.name]);        fileredr.onerror = (err) => reject(err);        fileredr.readAsDataURL(file);    });}var uploadFile=document.getElementById('uploadFile'); // input[type='file']uploadFile.addEventListener('change', (ev) => {  if (!window.FileReader) {        alert('Your browser does not support HTML5 "FileReader" function required to open a file.');    } else {let filesArr=ev.target.files;let fileReaders=[];for(let f in filesArr) {if(!isNaN(f)) fileReaders.push(readFileAsB64(filesArr[f]))      }Promise.all(fileReaders).then((outputArrs) => {for(let o in outputArrs) {if(!isNaN(o)) {let fileArr=outputArrs[o]; // [fileredr.result, file.name]/* TO DO LOGIC HERE */let image = new Image();              image.src = fileArr[0];              image.title = fileArr[1];              image.height = 100;document.body.appendChild(image);            }          }      });    }});

          上面的代碼片段確保在瀏覽器繼續(xù)執(zhí)行注釋后的代碼邏輯之前,所有上傳的圖像文件都已編碼為 Base64 字符串 (fileredr.readAsDataURL(file);):

          /* TO DO LOGIC HERE */

          9、 insertAdjacentHTML——beforebegin | 開始后 | 之前 | 尾端

          回顧第 1 點(diǎn)中的屏幕截圖,可以通過(guò) insertAdjacentHTML(<position>,<HTML String>) 將 HTML 附加到元素:

          <Element>.insertAdjacentHTML('beforeend'|'afterbegin'|'beforeend'|'afterend', <HTML String>);

          以下是每個(gè)選項(xiàng)所指的相對(duì)于 <Element>(即 <p></p>)的位置的說(shuō)明:

          <!-- beforebegin --><p><!-- afterbegin -->  foo<!-- beforeend --></p><!-- afterend -->

          由于在第 1 點(diǎn)中,目標(biāo)是附加額外的表格行 (<tr></tr>),因此,使用了 beforeend 位置。

          10、檢查JSON字符串是否有效

          由于我在場(chǎng)邊創(chuàng)建的大多數(shù)離線瀏覽器實(shí)用程序都需要用戶上傳數(shù)據(jù)文件,其中一些需要 JSON 格式,這是對(duì) JSON 文件進(jìn)行數(shù)據(jù)格式驗(yàn)證檢查的簡(jiǎn)單直接的方法 是:

          function isValidJSON(str) {try {JSON.parse(str);return true;  } catch (e) {return false;  }}// returns a Boolean

          11、 將原始 HTML 字符串編碼為 Unicode 實(shí)體

          function encodeHTMLChars(rawStr) {return rawStr.replace(/[\u00A0-\u9999<>\&]/g, ((i) => `&#${i.charCodeAt(0)};`));}

          要將文本 <img> 顯示到 HTML 頁(yè)面上,必須對(duì)字符串進(jìn)行如下編碼:

          var inputHTMLStr='<img>';var encodedHTMLStr=encodeHTMLChars(inputHTMLStr);console.log(encodedHTMLStr); // Output: &#60;img&#62;

          當(dāng)需要在網(wǎng)頁(yè)上顯示 HTML 代碼片段時(shí),這通常會(huì)派上用場(chǎng),因?yàn)槠湓夹问剑础?lt;img>”)被瀏覽器自動(dòng)解釋為 HTML DOM 元素,而不是用于顯示的原始文本。

          12、 將 XML 轉(zhuǎn)換為 JSON

          使用率最低的 2 個(gè) JavaScript API 包括:DOMParser() 和 DOMParser.parseFromString()

          盡管 xml-js 和 xml2js 等 npm 包很容易獲得,但這個(gè)邏輯可以通過(guò)純 JavaScript 實(shí)現(xiàn),如下所示:

          function convertXMLtoJSON(xmlObj) { // adapted from https://davidwalsh.name/convert-xml-jsonvar obj = {};if (xmlObj.nodeType == 1) {if (xmlObj.attributes.length > 0) {            obj['@attributes'] = {};for (var j = 0; j < xmlObj.attributes.length; j++) {var attribute = xmlObj.attributes.item(j);                obj['@attributes'][attribute.nodeName] = attribute.nodeValue;            }        }    } else if (xmlObj.nodeType == 3) {        obj = xmlObj.nodeValue;    }// Iterate through all child nodes// Use recursive to assign nested nodesif (xmlObj.hasChildNodes()) {for(var i = 0; i < xmlObj.childNodes.length; i++) {var item = xmlObj.childNodes.item(i);var nodeName = item.nodeName;if (typeof(obj[nodeName])==='undefined') {                obj[nodeName] = convertXMLtoJSON(item);            } else {if (typeof(obj[nodeName].push)==='undefined') {var old = obj[nodeName];                    obj[nodeName] = [];                    obj[nodeName].push(old);                }                obj[nodeName].push(convertXMLtoJSON(item));            }        }    }return obj;}/* USAGE: Sample xmlText */var xmlText = '<bookstore><book>' +'<title>Everyday Italian</title>' +'<author>Giada De Laurentiis</author>' +'<year>2005</year>' +'</book></bookstore>';var xmlParser=new DOMParser();var xmlObj=xmlParser.parseFromString(xmlText, 'text/xml');var jsonObj=convertXMLtoJSON(xmlObj);console.log(jsonObj);// Output: {"bookstore":{"book":{"title":{"#text":"Everyday Italian"},"author":{"#text":"Giada De Laurentiis"},"year":{"#text":"2005"}}}}

          免責(zé)聲明:上述代碼邏輯最初由 David Walsh 在 Convert XML to JSON 中實(shí)現(xiàn)。

          總結(jié)

          我的文章到此,就結(jié)束了!非常感謝您堅(jiān)持閱讀到最后!

          希望今天內(nèi)容對(duì)您有所幫助,并考慮將其加入收藏書簽以供參考學(xué)習(xí)使用。



          學(xué)習(xí)更多技能

          請(qǐng)點(diǎn)擊下方公眾號(hào)

          瀏覽 49
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  玖玖精品一区二区 | 操逼123视频 | 99热3| 国产激情av在线观看 | 天天干天天操 |