摘要:然而標(biāo)準(zhǔn)并沒(méi)有提供的反函數(shù)。首先把它轉(zhuǎn)換為對(duì)象數(shù)組注意箭頭后面的括號(hào)是必須的得到把他們合并起來(lái)。記得怎樣用扁平化數(shù)組么技巧類似完整代碼如下我發(fā)現(xiàn)越短的文章看的人越多,每周積累一些小技巧也是很好的新版中添加了作為的反函數(shù)
之前遇到過(guò)這樣一個(gè)問(wèn)題,把下面一段服務(wù)器返回的文本
Server: 192.168.31.92:2181 zk_outstanding_requests 0 zk_approximate_data_size 145237 zk_max_latency 417 zk_avg_latency 0 zk_version 3.4.8--1, built on 02/06/2016 03:18 GMT zk_watch_count 22 zk_num_alive_connections 12 zk_open_file_descriptor_count 41 zk_server_state follower zk_packets_sent 87679 zk_packets_received 79118 zk_min_latency 0 zk_ephemerals_count 17 zk_znode_count 2193 zk_max_file_descriptor_count 4096
轉(zhuǎn)換為對(duì)象的形式。
這是一整段字符串,當(dāng)然首先要按行分割為多段。設(shè)原始字符串為 str,則
let result = str.split(" ");
就獲得了一個(gè)字符串?dāng)?shù)組。每個(gè)字符串頭部都有空格,需要去除空格。
result = result.map(x => x.trim());
key 和 value 是放在同一段字符串里的,需要拆分開(kāi)
result = result.map(x => x.split(/ {3}| :/)); // 這里取巧了,實(shí)際代碼還是把第一行拆出來(lái)特殊處理比較好
這樣就得到了一個(gè)類似
[ [ "key1", "value1" ], [ "key2", "value2" ], [ "key3", "value3" ], // ... ]
的嵌套數(shù)組,可以看到,它正好是某對(duì)象 Object.entries 的結(jié)果。然而 JS 標(biāo)準(zhǔn)并沒(méi)有提供 Object.entries 的反函數(shù)。
手寫(xiě)的話,很容易想到循環(huán)遍歷賦值,這里有更簡(jiǎn)單的方法。首先把它轉(zhuǎn)換為對(duì)象數(shù)組
result = result.map(([ key, value ]) => ({ [key]: value })); // 注意箭頭后面的括號(hào)是必須的
得到
[ { "key1": "value1" }, { "key2": "value2" }, { "key3": "value3" }, // ... ]
把他們合并起來(lái)。記得怎樣用 Array.object.concat 扁平化數(shù)組么?技巧類似
result = Object.assign(...result);
完整代碼如下:
Object.assign(...str.split(" ").map(x => x.trim().split(/ {3}|: /)).map(([ key, value ]) => ({ [key]: value })))
PS: 我發(fā)現(xiàn)越短的文章看的人越多,每周積累一些小技巧也是很好的?
EDIT:新版 Firefox 中添加了 Object.fromEntries 作為 Object.entries 的反函數(shù)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/90162.html
摘要:前言第一次發(fā)表文章,如有不好的地方請(qǐng)見(jiàn)諒在編寫(xiě)代碼的時(shí)候存在的一些方法和技巧,雖然有時(shí)候條條大路都通向羅馬,但是也許總會(huì)有那么一條最短的路徑可走。 前言 第一次發(fā)表文章,如有不好的地方請(qǐng)見(jiàn)諒/ 在編寫(xiě)JavaScript代碼的時(shí)候存在的一些方法和技巧,雖然有時(shí)候條條大路都通向羅馬,但是也許總會(huì)有那么一條最短的路徑可走。本文將一些都知道卻不怎么用的小技巧分享給大家/ 一些小技巧 1.n...
摘要:前言第一次發(fā)表文章,如有不好的地方請(qǐng)見(jiàn)諒在編寫(xiě)代碼的時(shí)候存在的一些方法和技巧,雖然有時(shí)候條條大路都通向羅馬,但是也許總會(huì)有那么一條最短的路徑可走。 前言 第一次發(fā)表文章,如有不好的地方請(qǐng)見(jiàn)諒/ 在編寫(xiě)JavaScript代碼的時(shí)候存在的一些方法和技巧,雖然有時(shí)候條條大路都通向羅馬,但是也許總會(huì)有那么一條最短的路徑可走。本文將一些都知道卻不怎么用的小技巧分享給大家/ 一些小技巧 1.n...
摘要:希望通過(guò)以下幾點(diǎn)技巧讓大家的代碼化繁為簡(jiǎn),化簡(jiǎn)為精。巧學(xué)巧用可能有人知道中提供了新的數(shù)據(jù)結(jié)構(gòu),但是能夠靈活運(yùn)用的人或許不多。利用數(shù)據(jù)結(jié)構(gòu)我們能夠輕松的去重一個(gè)數(shù)組,比如方法可以將結(jié)構(gòu)轉(zhuǎn)為數(shù)組。 關(guān)于 微信公眾號(hào):前端呼啦圈(Love-FED) 我的博客:勞卜的博客 知乎專欄:前端呼啦圈 前言 由于工作和生活上的一些變化,最近寫(xiě)文章的頻率有點(diǎn)下降了,實(shí)在不好意思,不過(guò)相信不久就會(huì)慢慢...
摘要:方法用于對(duì)象的合并,將所有自身的非繼承的可枚舉屬性的值從一個(gè)或多個(gè)源對(duì)象拷貝到目標(biāo)對(duì)象。比如,如果對(duì)象的屬性是函數(shù)或?qū)ο螅搶傩詴?huì)被過(guò)濾掉,導(dǎo)致拷貝時(shí)會(huì)缺少屬性。利用遞歸對(duì)每一層都重新創(chuàng)建對(duì)象并賦值從而實(shí)現(xiàn)深拷貝 Object.assign() Object.assign() 方法用于對(duì)象的合并,將所有自身的(非繼承的)可枚舉屬性的值從一個(gè)或多個(gè)源對(duì)象拷貝到目標(biāo)對(duì)象。返回目標(biāo)對(duì)象。目標(biāo)...
摘要:若數(shù)值字符串和布爾值做為待合并數(shù)據(jù),合并至目標(biāo)目標(biāo)對(duì)象時(shí),只有字符串會(huì)以數(shù)組形式,拷貝到目標(biāo)對(duì)象。上面代碼中,布爾值數(shù)值字符串分別轉(zhuǎn)成對(duì)應(yīng)的包裝對(duì)象,可以看到它們的原始值都在包裝對(duì)象的內(nèi)部屬性上面,這個(gè)屬性是不會(huì)被拷貝的。 延續(xù)之前的關(guān)于ES6的學(xué)習(xí)內(nèi)容整理,該篇主要是整理ES6中關(guān)于對(duì)象的擴(kuò)展,希望對(duì)大家有幫助。之前已經(jīng)整理了ES6--字符串?dāng)U展和ES6--函數(shù)擴(kuò)展,大家有興趣可以移...
閱讀 654·2019-08-30 15:44
閱讀 1381·2019-08-30 11:02
閱讀 2980·2019-08-29 18:42
閱讀 3506·2019-08-29 16:16
閱讀 1720·2019-08-26 13:55
閱讀 1769·2019-08-26 13:45
閱讀 2385·2019-08-26 11:43
閱讀 3247·2019-08-26 10:32