一、jsexplode的定義
在JavaScript中,沒有自帶的字元串分割函數。因此,jsexplode是一種用於自定義JavaScript字元串分割操作的函數。
/** * 將字元串按指定分隔符分割成數組 * @param {String} str - 需要分割的字元串 * @param {String} delimiter - 分隔符 * @returns {Array} - 分割後的數組 */ function jsexplode(str, delimiter) { var arr = []; var start = 0; var end = str.indexOf(delimiter); while (end !== -1) { arr.push(str.substring(start, end)); start = end + delimiter.length; end = str.indexOf(delimiter, start); } arr.push(str.substring(start)); return arr; }
二、jsexplode的優勢
相比於JavaScript自帶的split函數,jsexplode有如下優勢:
- 可以處理多個字元作為分隔符。
- 在處理包含空字元串的數組時,jsexplode的表現更加穩定。
例如,需要將字元串用”$&#”和”|”分割成數組。使用jsexplode函數可以很方便地實現。
var str = "apple$&#banana|pear$&#watermelon"; var arr = jsexplode(str, "$&#|"); console.log(arr); //輸出:["apple", "banana", "pear", "watermelon"]
而使用JavaScript自帶的split函數,則需要連續調用兩次split函數,分別處理”$&#”和”|”作為分隔符。
var str = "apple$&#banana|pear$&#watermelon"; var arr1 = str.split("$&#"); var arr2 = []; arr1.forEach(function(s) { var arr = s.split("|"); arr.forEach(function(ss) { arr2.push(ss); }); }); console.log(arr2); //輸出:["apple", "banana", "pear", "watermelon"]
例如,需要將字元串用”,”分割成數組。有時候可能會出現連續的兩個逗號,這時候jsexplode也能夠正確處理。
var str = "apple,banana,,pear,watermelon"; var arr = jsexplode(str, ","); console.log(arr); //輸出:["apple", "banana", "", "pear", "watermelon"]
但是,使用JavaScript自帶的split函數時,會出現問題,連續的逗號會被當做空字元串處理。
var str = "apple,banana,,pear,watermelon"; var arr = str.split(","); console.log(arr); //輸出:["apple", "banana", "", "pear", "watermelon"]
三、jsexplode的應用
jsexplode可以在很多場景下使用,例如以下場景:
- 處理文本文件。
- 處理用戶輸入。
- 處理URL查詢字元串。
當需要從文本文件中讀取數據時,可以使用jsexplode函數進行處理。
//假設data.txt文件內容如下: //name,age,gender //Tom,18,male //Lily,19,female //John,20,male var xhr = new XMLHttpRequest(); xhr.open("GET", "data.txt", true); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { var data = xhr.responseText; var lines = jsexplode(data, "\n"); var table = document.createElement("table"); for (var i = 0; i < lines.length; i++) { var cols = jsexplode(lines[i], ","); var tr = document.createElement("tr"); for (var j = 0; j < cols.length; j++) { var td = document.createElement("td"); var text = document.createTextNode(cols[j]); td.appendChild(text); tr.appendChild(td); } table.appendChild(tr); } document.body.appendChild(table); } }; xhr.send();
當用戶需要輸入多個值時,可以使用jsexplode對用戶輸入的字元串進行處理。
<input type="text" id="input"> <button onclick="onClick()">分割</button> <div id="output"></div> <script> function onClick() { var str = document.getElementById("input").value; var arr = jsexplode(str, ","); var output = document.getElementById("output"); output.innerHTML = ""; for (var i = 0; i < arr.length; i++) { var div = document.createElement("div"); var text = document.createTextNode(arr[i]); div.appendChild(text); output.appendChild(div); } } </script>
當需要獲取URL查詢字元串中的參數時,可以使用jsexplode對查詢字元串進行處理。
//假設URL為:http://example.com/?name=Tom&age=18&gender=male var search = window.location.search.substring(1); var params = jsexplode(search, "&"); var data = {}; for (var i = 0; i < params.length; i++) { var pair = jsexplode(params[i], "="); data[pair[0]] = pair[1]; } console.log(data); //輸出:{ "name": "Tom", "age": "18", "gender": "male" }
原創文章,作者:BIEH,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/135942.html