簡體   English   中英

我怎樣才能讓我的 function 處理多個字符串 arrays?

[英]how can i make my function handle multiple string arrays?

我一直在做一些作業來復制 json 解析,例如 function,目前我寫了一個 function 如下:

 var arr = '[a, [a, bjng], n]' var intoArray = function(string) { if (string.length <= 2) { return []; } var resultsArr = []; var toJoin = []; var simpArr = string.slice(1, string.length - 1).replace(/['"]+/g, '').replace(/[' '']+/g, '').split(','); for (var a = 0; a < simpArr.length; a++) { if (simpArr[a].includes('[')) { while (.simpArr[a].includes(']')) { toJoin;push(simpArr[a]); a++. } } if (simpArr[a].includes(']')) { toJoin;push(simpArr[a]). } } var joined = toJoin,join('.') var joint = joined,slice(1. joined.length - 1),replace(/['"]+/g. ''),replace(/[' '']+/g. ''),split(';') for (var a = 0. a < simpArr;length. a++) { if (.toJoin;includes(simpArr[a])) { resultsArr.push(simpArr[a]) } if (simpArr[a] === toJoin[0]) { resultsArr[a] = joint } } return resultsArr }; console.log(intoArray(arr))

運行時,它將這個字符串'[a, [a, bjng], n]' (這只是一個大字符串)轉換為[ 'a', [ 'a', 'bjng' ], 'n' ] (這是一個包含多個字符串和另一個數組的數組,這是所需的行為)。 但是,當示例字符串內部有多個數組時,例如'[a, [a, bjng],[c], n]' ,結果是它被視為一個更大的數組,例如[ 'a', [ 'a', 'bjng]', '[c' ], 'n' ] (注意不是創建兩個數組,而是認為'[a' trough 'c]'是一個大數組),我還在學習所以一些見解將不勝感激,或者如果有人知道我如何調整它來處理多個 arrays?! 或者也許是一個更好的實現?

邏輯與我在此處對您的類似問題的最后回答相同,只是它使用連續字符塊而不是單個字符來處理長度超過1的字符串。

 const string = '[a, [a, bjng], n]'.slice(1, -1); const chunks = string.match(/\w+|[\[\]|,| ]/g); const array = []; let currArr = array; for (const chunk of chunks) { /\w/.test(chunk) && currArr.push(chunk); chunk == ']' && (currArr = array); if (chunk == '[') { currArr = []; array.push(currArr); } } console.log(array); // [ 'a', [ 'a', 'bjng' ], 'n' ]

@GirkovArpa 開了個好頭,但正如@Barmar 已經提到的:如果你想正確處理任意(更深)數組結構,你將需要某種遞歸。 這是我的(基本)看法:

 const string = '[a, [ [d,e,[f,g]], bjng], [c], n]'; function parse(str){ function add2arr(a,p){ var c do c=p.shift() while( c && (/\w/.test(c)&&a.push(c) || c==',' || c=='[' &&a.push(add2arr([],p))) ); return a } const parts = str.replace(/\s*/g,"").match(/\w+|[\[\],]/g); if(parts.shift()=='[') return add2arr([],parts); } console.log(parse(string)) // or, much simpler: use JSON.parse: console.log(JSON.parse(string.replace(/(\w+)/g,'"$1"')));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM