国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

每日 30 秒 ? JSON對象數組轉換 CSV 表格數據

Ajian / 1564人閱讀

簡介
數組、對象、CSV、表格、工具

我們在 每日 30 秒之 arrayToCSV 中一起學習了將數組數據轉化為 csv 表格數據并導出,那如果是對象數組怎么辦呢?小腦袋瓜轉得快的同學肯定會說:“使用 Array.prototype.map 把需要導出的字段先遍歷取出,再使用 arrayToCSV 將其導出為 CSV 數據表格?!?/p>

可是你有沒有想過如果一個對象數組數據非常之大時,使用 Array.prototype.maparrayToCSV 將會多出一倍的數據遍歷操作。作為優化狂魔的我們(那之前文章的使用場景還這么用?。。。┛隙ú辉试S這種事情發生,那就一起來學習一個用于對象數組且少花一半時間的轉換表格函數。

// 該源碼來自于 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("
");
代碼分析

把傳入需要提取的對象屬性作為表頭用分隔符分割開來:

columns.join(delimiter)

使用 Array.prototype.map 來遍歷對象數組獲得 表頭屬性屬性對應的值 并將其解構開:

...arr.map(obj => fn)

當屬性不存在時利用 || 技巧來初始化數據,并利用 Array.prototype.reduce 來拼接數據,注意 分隔符 應該在每兩個數據之間:

columns.reduce((acc, key) => {
    let value = obj[key] || ""
    acc += !acc.length ? "" : delimiter
    acc += `"${value}"`
}, "")

把表頭數組和對應的屬性數據組成的數組用 來拼接數據:

[..., ...].join("
")
使用場景

將頁面上用戶數據導出為 Excel 表格并且提供下載,本文的 JSONtoCSV 直接使用屬性作為表頭數據,機智的同學可以自己增加上表頭默認字段來將 JSONtoCSV 函數變得更加完美。

結構
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}`
}

同為面向百度編程的同學直接使用 data:text/csv;charset=utf-8,${csv} 來導出數據會出現亂碼,而本文中相對網絡上的版本增加了 ufeff 這個BOM頭來告訴 Excel 數據為 UTF-8 編碼解決亂碼問題。想知道更多關于 BOM 頭的內容可以查看 你所不知道的 BOM。

一起成長
在困惑的城市里總少不了并肩同行的 伙伴 讓我們一起成長。

如果您想讓更多人看到文章可以點個 點贊。

如果您想激勵小二可以到 Github 給個 小星星。

如果您想與小二更多交流添加微信 m353839115。

本文原稿來自 PushMeTop

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/109123.html

相關文章

  • 每日 30 ? CSV 表格數據轉換 JSON 對象

    簡介 數組、CSV、表格、工具 showImg(https://segmentfault.com/img/bVbp3L5?w=900&h=500); 我們之前的兩期 數組轉 CSV 表格數據 和 JSON 對象數組轉換 CSV 表格數據 中學習了轉化為 CSV 表格數據的代碼片段,今天就講講 如何把 CSV 表格數據轉換為 JSON 對象: // 該源碼來自于 https://30secondso...

    livem 評論0 收藏0
  • 每日 30 ? 數組CSV表格數據

    showImg(https://segmentfault.com/img/remote/1460000018771004?w=900&h=500); 簡介 數組、CSV、表格、工具 將一個數組轉化為逗號為分割符的字符串(CSV)即表格數據。 // 該源碼來自于 https://30secondsofcode.org const arrayToCSV = (arr, delimiter = ,) =...

    nanchen2251 評論0 收藏0
  • 每日 30 ? 數據類型大亂燉

    showImg(https://segmentfault.com/img/remote/1460000018796041?w=900&h=500); 簡介 字符串、數字、布爾值、Null、Undefined、對象、數組、函數、判斷方法 JavaScript 中有兩種數據類型,分別是基本數據類型和引用數據類型: 基本數據類型 引用數據類型 Number、String、Boolean、Null...

    meteor199 評論0 收藏0
  • Python3網絡爬蟲實戰---31、數據存儲:文件存儲

    摘要:如果該文件已存在,文件指針將會放在文件的結尾。運行結果以上是讀取文件的方法。為了輸出中文,我們還需要指定一個參數為,另外規定文件輸出的編碼。 上一篇文章:Python3網絡爬蟲實戰---30、解析庫的使用:PyQuery下一篇文章:Python3網絡爬蟲實戰---32、數據存儲:關系型數據庫存儲:MySQL 我們用解析器解析出數據之后,接下來的一步就是對數據進行存儲了,保存的形式可以...

    dreamans 評論0 收藏0
  • 每日 30 ? 數組所有數據是否滿足某條件

    showImg(https://segmentfault.com/img/remote/1460000018770987?w=900&h=500); 簡介 數組、every、any 判斷一個數組中是否都滿足特定的條件,如果滿足則返回 true 否則返回 false。 // 該源碼來自于 https://30secondsofcode.org const all = (arr, fn = Boole...

    FullStackDeveloper 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<