精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

聊聊字符串轉樹結構

開發 前端
要對字符串進行處理,好像沒有什么比較好的方法,理不出頭緒。當我們遇到這種直接從數據結構出發想不出辦法的問題時,這時可能就要換個思路了,能否將它轉換為另一種數據結構呢?

前言

有一個多行字符串,每行開頭會用空格來表示它的層級關系,每間隔一層它的空格總數為2,如何將它轉為json格式的樹型數據?本文就跟大家分享下這個算法,歡迎各位感興趣的開發者閱讀本文。

例如有一個字符串:

const text = `
Language
JavaScript
TypeScript
NodeJS
HTML
Server
DataBase
MongoDB
System
Linux
Window
`;

將其轉換為有層次結構的json數據后為:

{
"name":"root",
"children":[
{
"name":"Language",
"children":[
{
"name":"JavaScript",
"children":[
{
"name":"TypeScript"
},
{
"name":"NodeJS"
}
]
},
{
"name":"HTML"
}
]
},
{
"name":"Server",
"children":[
{
"name":"DataBase",
"children":[
{
"name":"MongoDB"
}
]
}
]
},
{
"name":"System",
"children":[
{
"name":"Linux"
},
{
"name":"Window"
}
]
}
]
}

思路分析

乍一看,要對字符串進行處理,好像沒有什么比較好的方法,理不出頭緒。當我們遇到這種直接從數據結構出發想不出辦法的問題時,這時可能就要換個思路了,能否將它轉換為另一種數據結構呢?

審題后發現,我們需要的數據元素在字符串中總是獨占一行的,那么我們就要對每一行進行處理,此時最好的方式就是將它切割成數組。

那么,我們就以換行符作為切割點來構造數組,如下所示:

[
"","Language"," JavaScript", " TypeScript"," NodeJS", " HTML","Server"," DataBase"," MongoDB","System"," Linux"," Window",""
]

觀察數組中的每個元素后,我們發現最頂層的數據開頭無空格,每間隔一層,開頭就會多兩個空格。按照從前往后的順序依次讀取數據,將后一個數據與其之前的數據進行比較,進而確定他們之間的層次關系。

分析到這里,相信很多開發者已經看出了這個比較方式滿足了“后入先出”原則,因此,我們可以用棧來解決這個問題,如下所示:

  • 準備2個棧,一個用于存放每層的字符串,另一個用于存放每層的空格數。
  • 默認將root入棧,將它的空格數定為-1。

圖片

接下來,我們將每個元素逐一入棧,分析下它的過程。如下圖所示,我們列舉了部分元素的入棧比對過程,通過觀察后,總結出了如下幾條規律。

  • 獲取入棧元素的空格總數
  • 獲取棧頂(deepStack)元素,判斷入棧元素的空格總數是否大于棧頂元素。

滿足條件則獲取strStack的棧頂元素,將入棧元素元素放入它的子級

否則,將兩個棧的元素依次出棧。直至入棧元素的空格總數比deepStack的棧頂元素大,獲取strStack的棧頂元素,將入棧元素元素放入它的子級

  • 將入棧元素以及它的空格總數分別放入對應的棧中
  • 直至所有元素都入棧比對完成,此問題得到解決

圖片

注意:為了讓讀者更直觀的看出規律,strStack棧中的元素用字符串直接代替了,實際上棧中存儲的數據是一個對象,該對象包含了name屬性和children屬性。當前入棧元素也會構造成一個對象,得出棧頂元素(deepStack)與入棧元素空格總數的比對結果后,會將入棧元素對象放進棧頂元素(strStack)的children中。

實現代碼

經過上面的分析,我們已經得出了完整的實現思路,接下來我們來看下代碼的實現。

/**
* 字符串轉樹結構
* @param text
* @constructor
*/
export function DataConversion(text: string): nodeObj {
const splitArr = text.split("\n");

const json = { name: "root" };
const strStack = new Stack();
const deepStack = new Stack();
strStack.push(json);
deepStack.push(-1);

for (let i = 0; i < splitArr.length; i++) {
let str = splitArr[i];
if (!str) continue;
// 獲取空格總數
const len = str.lastIndexOf(" ") + 1;
str = str.replace(/\s/g, "");
const curObj = { name: str };

// 尋找當前入棧元素的父層級
while (len <= deepStack.peek()) {
deepStack.pop();
strStack.pop();
}
const stackTop: nodeObj = strStack.peek();
stackTop.children
? stackTop.children.push(curObj)
: (stackTop.children = [curObj]);

// 元素入棧,繼續下一輪的比對
strStack.push(curObj);
deepStack.push(len);
}

return json;
}

注意:上述代碼中聲明了一個自定義類型nodeObj以及一個自定義類Stack,完整代碼請在示例代碼中查看。

最后,我們將開頭的例子代入上述代碼中,校驗下它能否正確解決問題。

const text = `
Language
JavaScript
TypeScript
NodeJS
HTML
Server
DataBase
MongoDB
System
Linux
Window
`;

const textJSON = DataConversion(text);
console.log(JSON.stringify(textJSON));

圖片

圖片

示例代碼

本文用到的代碼完整版請移步:

  • DataConversion.ts
  • DataConversion-test.ts
責任編輯:武曉燕 來源: 神奇的程序員
相關推薦

2009-06-23 14:13:00

Java字符串

2021-11-15 07:47:40

字符串位置存儲

2009-11-25 09:13:41

PHP數組轉字符串PHP字符串轉數組

2009-11-16 17:59:13

PHP數組轉字符串

2021-12-21 11:39:01

數據結構算法同構字符串

2021-12-24 11:59:47

數據結構算法字符串

2012-02-06 15:22:16

Java

2019-03-07 15:43:22

Redis數據SDS

2024-04-01 08:41:39

字符串.NET

2010-04-15 16:47:46

Oracle字段

2024-06-26 07:58:06

2010-09-09 11:48:00

SQL函數字符串

2014-01-02 16:14:10

PostgreSQL字符串

2011-08-10 18:47:18

Cocoa字符串

2023-01-11 16:49:13

MySQL數據庫

2009-07-16 17:01:09

Swing字符串

2010-11-26 09:51:54

MySQL字符串

2021-03-08 08:23:24

Java字符串截取

2010-06-28 15:18:51

SQL Server

2021-03-08 08:57:00

Go 字符串測試
點贊
收藏

51CTO技術棧公眾號

欧美在线看片a免费观看| 国产一区二区三区在线观看免费 | 你懂的av在线| 欧美日韩在线中文字幕| 日本系列欧美系列| 久久99热精品| 久久久视频6r| 风间由美一区二区av101| 欧美亚洲国产bt| 日韩美女爱爱视频| 91在线看片| jlzzjlzz国产精品久久| 国产一区玩具在线观看| 影音先锋在线国产| 欧美私人啪啪vps| 一个色综合导航| 国产精品成人无码专区| 精品一区二区三区亚洲| 欧美性生活大片免费观看网址| 中国 免费 av| 狠狠色伊人亚洲综合网站l | 亚洲色成人网站www永久四虎 | 日韩久久精品一区二区三区| 国产黄色片网站| 免费观看30秒视频久久| 国产91|九色| 欧美成人精品欧美一级| 久久激情电影| 亚洲一级片在线看| 久久人人妻人人人人妻性色av| 国产电影一区| 欧美日韩国产高清一区二区三区 | 欧美一区二区三区免费大片 | 国产一区二区免费视频| 人体精品一二三区| 久久精品视频日本| 欧美日韩国产探花| 久久久精品2019中文字幕神马| 国产成人福利在线| 一道在线中文一区二区三区| 精品国产一区二区三区不卡| 婷婷激情综合五月天| 国产精成人品2018| 91久久久免费一区二区| 日本精品一区二区三区四区| 国产www视频在线观看| 最新欧美精品一区二区三区| 亚洲欧洲中文| h网站在线免费观看| 久久久不卡网国产精品一区| 免费一区二区三区| 日本高清中文字幕二区在线| 成人国产精品免费观看| 国产高清自拍一区| 黑人精品一区二区三区| 国产aⅴ综合色| 99理论电影网| 狠狠躁日日躁夜夜躁av| 成人一区二区视频| 精品国产一区二区三| 五月婷婷六月丁香综合| 97久久精品人人爽人人爽蜜臀| 国产精品视频免费一区| 日本高清视频www| 久久综合网色—综合色88| 欧美亚洲丝袜| 中文字幕在线观看日本| 亚洲婷婷国产精品电影人久久| 一区二区三区四区免费观看| 91高清在线观看视频| 亚洲国产一区在线观看| 日本福利视频在线| 成人黄色免费短视频| 欧美日韩在线观看一区二区 | 久久福利视频网| 久久免费精彩视频| 99国产精品久久久久久久成人热| 欧美亚洲成人精品| 色婷婷久久综合中文久久蜜桃av| 精一区二区三区| 国产精华一区二区三区| 精品资源在线看| 中文字幕在线观看一区二区| 台湾无码一区二区| 新版的欧美在线视频| 欧美三片在线视频观看| 国产成人精品一区二区在线小狼| 午夜欧洲一区| 日韩一级黄色av| 国产精彩视频在线| 日韩成人免费看| 亚洲一区二区免费| 天天操天天操天天| 国产精品久久三区| 国产精品久久久久久久乖乖| 国产精品亚洲一区二区三区在线观看| 欧美日本不卡视频| 国产二级一片内射视频播放| 欧美日韩老妇| 国内精品小视频在线观看| 波多野结衣午夜| 国产91精品久久久久久久网曝门| 欧美日韩一区在线观看视频| 欧洲一区二区三区| 欧美性受极品xxxx喷水| 亚洲v在线观看| 日韩精品一区二区久久| 性欧美暴力猛交69hd| 97人妻一区二区精品免费视频 | 亚洲va韩国va欧美va精四季| 黄色污污视频在线观看| 欧美在线免费视屏| 手机在线看片日韩| 欧美激情91| 国产精品高精视频免费| 免费观看黄色一级视频| 中文字幕一区日韩精品欧美| 国产亚洲精品网站| 成人知道污网站| 日韩三级成人av网| 人人妻人人爽人人澡人人精品| 粉嫩在线一区二区三区视频| 在线免费观看一区二区三区| 在线成人av观看| 亚洲成人999| 亚洲欧美一区二区三区四区五区| 美女国产一区二区| 日产精品久久久一区二区| 成人免费图片免费观看| 欧美videofree性高清杂交| av资源在线免费观看| 老牛国产精品一区的观看方式 | 99久久99久久精品国产片果冰| 欧美中文在线视频| 神马久久久久久久久久| 一区二区三区在线视频观看58| 亚洲欧美aaa| 久久国产电影| 国产色综合天天综合网| 137大胆人体在线观看| 日本高清视频一区二区| 精品无码一区二区三区| 在线亚洲成人| 久久艹中文字幕| 在线看片国产福利你懂的| 亚洲精品国产欧美| 日产精品久久久久| 9人人澡人人爽人人精品| 成年人看的毛片| 风间由美中文字幕在线看视频国产欧美 | 色哟哟无码精品一区二区三区| 欧美成人久久| 国产精品成人观看视频免费| 丰满大乳少妇在线观看网站 | youjizz.com日本| 极品av少妇一区二区| 国产欧美一区二区三区另类精品 | 在线观看视频一区| 农村老熟妇乱子伦视频| 精品一区二区三区日韩| 影音先锋成人资源网站| 57pao国产一区二区| 性欧美激情精品| 户外极限露出调教在线视频| 欧美三级蜜桃2在线观看| 开心激情五月网| 国产成人午夜精品5599 | 美女网站视频色| 国产精品亚洲一区二区三区妖精 | 日韩电影在线一区二区| 亚洲一二三区在线| 一区二区三区自拍视频| 97在线观看免费| 高清性色生活片在线观看| 欧美日本一区二区在线观看| 国产稀缺精品盗摄盗拍| 成人综合在线视频| 精品视频无码一区二区三区| 91综合久久| 国产视频99| 日韩漫画puputoon| 欧美日韩国产成人在线观看| 四虎国产精品永远| 欧美日本免费一区二区三区| 久一区二区三区| 国产日韩欧美一区二区三区乱码| 欧美视频国产视频| 一本色道久久| 尤物一区二区三区| 精品日产乱码久久久久久仙踪林| 国产精品福利无圣光在线一区| 少妇精品无码一区二区免费视频| 国产福利在线免费观看| 日韩精品欧美激情| 亚洲一卡二卡在线观看| 亚洲高清免费一级二级三级| 极品蜜桃臀肥臀-x88av| 国产成人av网站| 亚洲乱码国产一区三区| 欧美不卡一区| 亚洲午夜精品久久久中文影院av | 热三久草你在线| 久久视频在线看| 国产在线小视频| 亚洲国产一区二区三区四区| 国产精品一区二区三区在线免费观看 | 亚洲日本网址| 国内精品400部情侣激情| 91在线观看| 国产丝袜一区视频在线观看 | 久久综合成人精品亚洲另类欧美 | 依依成人精品视频| 三年中国中文观看免费播放| www.av亚洲| 好吊操视频这里只有精品| 麻豆精品一区二区| 丰满少妇被猛烈进入高清播放| 欧美日韩18| 日本福利视频导航| 国产精品一区二区99| 国产伦精品一区二区三毛| 精品国产欧美| 成人有码视频在线播放| 国产成人精品亚洲日本在线观看| 午夜欧美大片免费观看| 黄色在线看片| 欧美肥老妇视频| 二区三区在线观看| 久久精品国产免费观看| 97电影在线看视频| 一区二区三区天堂av| 国产一二三在线观看| 亚洲女在线观看| 亚洲日本国产精品| 亚洲国产另类久久精品| 蜜桃视频污在线观看| 日韩一级大片在线观看| 国产偷人妻精品一区二区在线| 欧美日本视频在线| 91亚洲国产成人精品一区| 欧洲av一区二区嗯嗯嗯啊| 亚洲图片欧美日韩| 91高清在线观看| 免费看av在线| 欧美久久高跟鞋激| 国产一区二区网站| 在线综合亚洲欧美在线视频| 国产乱码精品一区二三区蜜臂 | 国产吃瓜黑料一区二区| 国产成a人亚洲| 极品人妻一区二区| 高清不卡在线观看| 男人的天堂免费| 不卡一区中文字幕| 欧美高清性xxxx| 久久精品欧美一区二区三区不卡| 亚洲综合欧美综合| 亚洲色图视频网| 九九视频在线观看| 亚洲不卡av一区二区三区| 全部毛片永久免费看| 日本韩国欧美一区二区三区| 亚洲专区在线播放| 日韩一区二区在线观看| 日本精品999| 亚洲视频999| 国产午夜精品久久久久免费视| 欧美成人在线免费视频| 91资源在线观看| 日本免费一区二区三区视频观看 | 69堂精品视频| 色欲久久久天天天综合网| 亚洲精选中文字幕| 日本高清视频在线播放| 九九热这里只有在线精品视| 91美女精品| 国产精品无av码在线观看| 国产精品日本一区二区不卡视频 | 国产精品v日韩精品| 99久热在线精品视频观看| 国产亚洲福利社区| 欧美一区免费看| 美女91精品| 国产aⅴ爽av久久久久| 大陆成人av片| 快灬快灬一下爽蜜桃在线观看| 亚洲欧美日韩中文播放| 国产毛片aaa| 欧美精品久久一区| 亚洲 精品 综合 精品 自拍| 色偷偷偷综合中文字幕;dd| 日韩影视在线| 国产精品午夜一区二区欲梦| 中文字幕一区图| 亚洲精品一区二区三| 国产精品红桃| 污片在线免费看| 91免费看`日韩一区二区| 天堂网avav| 91精品1区2区| 深夜福利视频网站| 久久成人精品视频| 日本黄色一区| 国产一区二区黄色| 国产精品毛片一区二区在线看| 精品欧美一区免费观看α√| 激情图片小说一区| 蜜桃无码一区二区三区| 亚洲va国产va欧美va观看| 一级黄色录像大片| 亚洲欧美国产制服动漫| 麻豆蜜桃在线| 成人亚洲激情网| 欧美精选一区二区三区| 日日摸日日碰夜夜爽无码| 国产一区二区三区免费在线观看 | 欧美猛男同性videos| 日本黄大片在线观看| 国内精品免费在线观看| 女人十八毛片嫩草av| 福利微拍一区二区| 韩国av电影在线观看| 久操成人在线视频| 国产精品**亚洲精品| 亚洲欧美日韩另类精品一区二区三区 | 国产精品一级二级| 日韩在线免费高清视频| 日韩精品影片| 日韩精品在在线一区二区中文| 亚洲一区二区三区四区五区午夜| 91精品又粗又猛又爽| 一区二区在线电影| 精品国产无码一区二区三区| 久久香蕉国产线看观看网| 欧美aaaaaa| 一区二区日本| 麻豆91精品91久久久的内涵| 影音先锋制服丝袜| 在线视频一区二区三| 久久这里精品| 国产精品对白刺激| 成人精品电影| 少妇网站在线观看| 国产精品人人做人人爽人人添| 这里只有精品国产| 主播福利视频一区| 欧美jizz18| 最新不卡av| 国产一区在线看| 免费一级黄色大片| 亚洲精品在线免费观看视频| 丰满诱人av在线播放| 久久综合给合久久狠狠色| 羞羞答答国产精品www一本| 中文幕无线码中文字蜜桃| 色婷婷久久综合| 香港伦理在线| 91精品网站| 在线亚洲欧美| 黄色aaa视频| 欧美日韩成人综合天天影院 | 日本大胆欧美| 亚洲制服中文字幕| 亚洲一区二区3| 日本不卡免费播放| 国产精品视频一区国模私拍| 国产精品99久久久久久动医院| 一级黄色在线播放| 亚洲午夜羞羞片| 日韩欧美在线番号| 国产精品一区二区性色av| 一本一道久久综合狠狠老| 不许穿内裤随时挨c调教h苏绵| 欧美日韩免费看| 午夜视频在线看| 国产精品亚洲综合| 日韩av一区二区三区| 一起操在线播放| 亚洲国产精品嫩草影院久久| 四虎影视4hu4虎成人| 欧美另类videos| www.欧美.com| 中日韩av在线| 久久久人成影片一区二区三区观看| 少妇精品导航| 91丝袜超薄交口足| 欧美性猛交xxxx黑人猛交| 久cao在线| 欧美激情专区| 国产伦精品一区二区三区在线观看| 日本一区二区免费在线观看| 上原亚衣av一区二区三区| 国产成人澳门| 亚洲这里只有精品| 亚洲成人av资源| 黄色一级大片在线免费看产| 久久久99国产精品免费| 国内成人精品2018免费看| 国产一级免费视频| 欧美黄色片免费观看|