簡介
數(shù)組、對(duì)象、CSV、表格、工具
我們?cè)?每日 30 秒之 arrayToCSV 中一起學(xué)習(xí)了將數(shù)組數(shù)據(jù)轉(zhuǎn)化為 csv 表格數(shù)據(jù)并導(dǎo)出,那如果是對(duì)象數(shù)組怎么辦呢?小腦袋瓜轉(zhuǎn)得快的同學(xué)肯定會(huì)說:“使用 Array.prototype.map 把需要導(dǎo)出的字段先遍歷取出,再使用 arrayToCSV 將其導(dǎo)出為 CSV 數(shù)據(jù)表格?!?/p>
可是你有沒有想過如果一個(gè)對(duì)象數(shù)組數(shù)據(jù)非常之大時(shí),使用 Array.prototype.map 和 arrayToCSV 將會(huì)多出一倍的數(shù)據(jù)遍歷操作。作為優(yōu)化狂魔的我們(那之前文章的使用場景還這么用?。。。┛隙ú辉试S這種事情發(fā)生,那就一起來學(xué)習(xí)一個(gè)用于對(duì)象數(shù)組且少花一半時(shí)間的轉(zhuǎn)換表格函數(shù)。
// 該源碼來自于 https://30secondsofcode.org const JSONtoCSV = (arr, columns, delimiter = ",") => [ columns.join(delimiter), ...arr.map(obj => columns.reduce( (acc, key) => `${acc}${!acc.length ? "" : delimiter}"${obj[key] || ""}"`, "" ) ) ].join(" ");代碼分析
把傳入需要提取的對(duì)象屬性作為表頭用分隔符分割開來:
columns.join(delimiter)
使用 Array.prototype.map 來遍歷對(duì)象數(shù)組獲得 表頭屬性屬性對(duì)應(yīng)的值 并將其解構(gòu)開:
...arr.map(obj => fn)
當(dāng)屬性不存在時(shí)利用 || 技巧來初始化數(shù)據(jù),并利用 Array.prototype.reduce 來拼接數(shù)據(jù),注意 分隔符 應(yīng)該在每兩個(gè)數(shù)據(jù)之間:
columns.reduce((acc, key) => { let value = obj[key] || "" acc += !acc.length ? "" : delimiter acc += `"${value}"` }, "")
把表頭數(shù)組和對(duì)應(yīng)的屬性數(shù)據(jù)組成的數(shù)組用 來拼接數(shù)據(jù):
[..., ...].join(" ")使用場景
將頁面上用戶數(shù)據(jù)導(dǎo)出為 Excel 表格并且提供下載,本文的 JSONtoCSV 直接使用屬性作為表頭數(shù)據(jù),機(jī)智的同學(xué)可以自己增加上表頭默認(rèn)字段來將 JSONtoCSV 函數(shù)變得更加完美。
download??????
const users = [ { name: "xiaoer", age: 24, sex: "男" }, { name: "xiaosi", age: 8, sex: "男" }, { name: "menty", age: 18, sex: "女" }, ] function downloadUserData(target) { const csv = JSONtoCSV(users, ["name", "age", "sex"]) target.href = `data:text/csv;charset=utf-8,ufeff${csv}` }
同為面向百度編程的同學(xué)直接使用 data:text/csv;charset=utf-8,${csv} 來導(dǎo)出數(shù)據(jù)會(huì)出現(xiàn)亂碼,而本文中相對(duì)網(wǎng)絡(luò)上的版本增加了 ufeff 這個(gè)BOM頭來告訴 Excel 數(shù)據(jù)為 UTF-8 編碼解決亂碼問題。想知道更多關(guān)于 BOM 頭的內(nèi)容可以查看 你所不知道的 BOM。
一起成長在困惑的城市里總少不了并肩同行的 伙伴 讓我們一起成長。
如果您想讓更多人看到文章可以點(diǎn)個(gè) 點(diǎn)贊。
如果您想激勵(lì)小二可以到 Github 給個(gè) 小星星。
如果您想與小二更多交流添加微信 m353839115。
本文原稿來自 PushMeTop
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/109123.html
簡介 數(shù)組、CSV、表格、工具 showImg(https://segmentfault.com/img/bVbp3L5?w=900&h=500); 我們之前的兩期 數(shù)組轉(zhuǎn) CSV 表格數(shù)據(jù) 和 JSON 對(duì)象數(shù)組轉(zhuǎn)換 CSV 表格數(shù)據(jù) 中學(xué)習(xí)了轉(zhuǎn)化為 CSV 表格數(shù)據(jù)的代碼片段,今天就講講 如何把 CSV 表格數(shù)據(jù)轉(zhuǎn)換為 JSON 對(duì)象: // 該源碼來自于 https://30secondso...
showImg(https://segmentfault.com/img/remote/1460000018771004?w=900&h=500); 簡介 數(shù)組、CSV、表格、工具 將一個(gè)數(shù)組轉(zhuǎn)化為逗號(hào)為分割符的字符串(CSV)即表格數(shù)據(jù)。 // 該源碼來自于 https://30secondsofcode.org const arrayToCSV = (arr, delimiter = ,) =...
showImg(https://segmentfault.com/img/remote/1460000018796041?w=900&h=500); 簡介 字符串、數(shù)字、布爾值、Null、Undefined、對(duì)象、數(shù)組、函數(shù)、判斷方法 JavaScript 中有兩種數(shù)據(jù)類型,分別是基本數(shù)據(jù)類型和引用數(shù)據(jù)類型: 基本數(shù)據(jù)類型 引用數(shù)據(jù)類型 Number、String、Boolean、Null...
摘要:如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。運(yùn)行結(jié)果以上是讀取文件的方法。為了輸出中文,我們還需要指定一個(gè)參數(shù)為,另外規(guī)定文件輸出的編碼。 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---30、解析庫的使用:PyQuery下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---32、數(shù)據(jù)存儲(chǔ):關(guān)系型數(shù)據(jù)庫存儲(chǔ):MySQL 我們用解析器解析出數(shù)據(jù)之后,接下來的一步就是對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)了,保存的形式可以...
showImg(https://segmentfault.com/img/remote/1460000018770987?w=900&h=500); 簡介 數(shù)組、every、any 判斷一個(gè)數(shù)組中是否都滿足特定的條件,如果滿足則返回 true 否則返回 false。 // 該源碼來自于 https://30secondsofcode.org const all = (arr, fn = Boole...
閱讀 3060·2021-11-22 09:34
閱讀 3650·2021-08-31 09:45
閱讀 3867·2019-08-30 13:57
閱讀 1684·2019-08-29 15:11
閱讀 1691·2019-08-28 18:04
閱讀 3233·2019-08-28 17:59
閱讀 1575·2019-08-26 13:35
閱讀 2197·2019-08-26 10:12