最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

前端JS實現(xiàn)高質(zhì)量批量導(dǎo)出JSON和XLSX的實戰(zhàn)指南

 更新時間:2026年03月03日 09:49:14   作者:前端小小棧  
在應(yīng)用場景下,用戶導(dǎo)出數(shù)據(jù)通常有兩個目的,即備份/遷移(JSON)或分享/離線審閱(Excel),下面我們就來看看具體實現(xiàn)方法,希望對大家有所幫助

對于 100 條這種量級的數(shù)據(jù),雖然內(nèi)存壓力不大,但格式的標(biāo)準(zhǔn)化導(dǎo)出的順滑度是區(qū)分“初級實現(xiàn)”和“資深工具”的關(guān)鍵。

在應(yīng)用場景下,用戶導(dǎo)出數(shù)據(jù)通常有兩個目的:備份/遷移(JSON)或分享/離線審閱(Excel) 。

1. 方案選擇:JSON vs. XLSX

格式優(yōu)勢劣勢資深開發(fā)建議
JSON結(jié)構(gòu)化、無損、瀏覽器原生支持。對非技術(shù)人員不友好。用于系統(tǒng)備份、數(shù)據(jù)遷移。
XLSX可讀性極強(qiáng)、支持排序篩選。需要第三方庫、體積較大。用于周報匯報、團(tuán)隊分享。

2. 導(dǎo)出 JSON:最純粹的無損備份

這是最簡單的方案,不需要任何庫,直接利用 BlobURL.createObjectURL。

/**
 * 導(dǎo)出為 JSON 文件
 * @param {Array} data - Prompt 數(shù)組
 */
function exportToJSON(data) {
  // 1. 序列化,添加 2 個空格縮進(jìn)方便閱讀
  const content = JSON.stringify(data, null, 2);
  
  // 2. 創(chuàng)建 Blob 
  const blob = new Blob([content], { type: 'application/json' });
  
  // 3. 觸發(fā)下載
  downloadFile(blob, `Prompts_Backup_${new Date().getTime()}.json`);
}

3. 導(dǎo)出 XLSX:專業(yè)的表格方案

對于 Excel 導(dǎo)出,SheetJS (xlsx) 是行業(yè)標(biāo)準(zhǔn)。作為 8 年老兵,我會建議你使用 動態(tài)引入(Dynamic Import) ,因為這個庫體積較大(數(shù)百 KB),沒必要在首屏加載。

實戰(zhàn)代碼(按需加載型)

async function exportToXLSX(data) {
  // 1. 動態(tài)加載 SheetJS
  const XLSX = await import('https://cdn.sheetjs.com/xlsx-0.20.1/package/dist/xlsx.full.min.js');

  // 2. 數(shù)據(jù)扁平化(如果你的 Prompt 包含嵌套對象,需要先處理)
  const worksheet = XLSX.utils.json_to_sheet(data);
  
  // 3. 創(chuàng)建工作簿
  const workbook = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(workbook, worksheet, "MyPrompts");

  // 4. 寫入并觸發(fā)下載
  XLSX.writeFile(workbook, `Prompt_Export_${new Date().toLocaleDateString()}.xlsx`);
}

4. 資深開發(fā)的“性能與健壯性”補(bǔ)丁

統(tǒng)一的下載觸發(fā)器(避免內(nèi)存泄漏)

頻繁導(dǎo)出時,如果不銷毀 ObjectURL,會導(dǎo)致頁面內(nèi)存占用持續(xù)攀升。

function downloadFile(blob, fileName) {
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = fileName;
  document.body.appendChild(a);
  a.click();
  
  // 關(guān)鍵:延遲移除和銷毀,確保下載任務(wù)已交給瀏覽器
  setTimeout(() => {
    document.body.removeChild(a);
    URL.revokeObjectURL(url);
  }, 100);
}

數(shù)據(jù)清洗(避免 Excel 報錯)

Excel 對某些特殊字符或過長的單個單元格(超過 32767 字符)會報錯。

對策:在 json_to_sheet 之前,遍歷數(shù)據(jù),對超長 Prompt 進(jìn)行截斷或分塊,或者至少給用戶一個提示。

導(dǎo)出時的“防抖”與“狀態(tài)反饋”

100 條數(shù)據(jù)雖然快,但如果是 10000 條,UI 可能會卡死。

對策:點擊導(dǎo)出后,按鈕立即進(jìn)入 Loading 狀態(tài),并使用 Web Worker 處理數(shù)據(jù)序列化,最后再回到主線程觸發(fā)下載。

5. 加分項

  • 文件名命名規(guī)范:不要只叫 data.json。推薦 [應(yīng)用名]_[分類]_[日期].xlsx。
  • 表頭國際化:如果你的工具面向國際,導(dǎo)出的 Excel 表頭(如:標(biāo)題、內(nèi)容、創(chuàng)建時間)應(yīng)該根據(jù)當(dāng)前 UI 語言動態(tài)映射。
  • CSV 降級:如果不想引幾十 KB 的 xlsx 庫,且數(shù)據(jù)結(jié)構(gòu)簡單,導(dǎo)出 CSV 是最高性能的方案。但要注意加上 BOM (Byte Order Mark) 頭(\ufeff),否則 Excel 打開中文會亂碼。
// CSV 亂碼修正技巧
const csvContent = "\ufeff" + convertToCSV(data);
const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });

到此這篇關(guān)于前端JS實現(xiàn)高質(zhì)量批量導(dǎo)出JSON和XLSX的實戰(zhàn)指南的文章就介紹到這了,更多相關(guān)JS導(dǎo)出JSON和XLSX內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS獲取子窗口中返回的數(shù)據(jù)實現(xiàn)方法

    JS獲取子窗口中返回的數(shù)據(jù)實現(xiàn)方法

    下面小編就為大家?guī)硪黄狫S獲取子窗口中返回的數(shù)據(jù)實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • JavaScript的一些小技巧分享

    JavaScript的一些小技巧分享

    這篇文章主要介紹了JavaScript的一些小技巧分享,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下
    2021-01-01
  • JS事件處理機(jī)制及事件代理(事件委托)實例詳解

    JS事件處理機(jī)制及事件代理(事件委托)實例詳解

    這篇文章主要介紹了JS事件處理機(jī)制及事件代理,結(jié)合實例形式詳細(xì)分析了JS時間處理機(jī)制與事件代理功能、用法及相關(guān)使用技巧,需要的朋友可以參考下
    2023-06-06
  • 基于Turn.js 實現(xiàn)翻書效果實例解析

    基于Turn.js 實現(xiàn)翻書效果實例解析

    最近項目經(jīng)理我個項目練練手,其項目需求是要實現(xiàn)翻書效果,看到這個需求后,我真是懵了,這咋整,我可是java出身的啊,這個問題真是難住我了,后來有同事的指導(dǎo),問題順利解決,下面小編把學(xué)習(xí)心得分享,感興趣的朋友可以參考下
    2016-06-06
  • javascript中$(function() {});寫與不寫有哪些區(qū)別

    javascript中$(function() {});寫與不寫有哪些區(qū)別

    javascript中$(function() {....}) 是jQuery中的經(jīng)典用法,等同于 $(document).ready(function() {....}) javascript中$(function() {});寫與不寫有哪些區(qū)別,需要的朋友可以參考下
    2015-08-08
  • 微信小程序?qū)崿F(xiàn)答題倒計時

    微信小程序?qū)崿F(xiàn)答題倒計時

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)答題倒計時,自定義計時器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • js實現(xiàn)九宮格的隨機(jī)顏色跳轉(zhuǎn)

    js實現(xiàn)九宮格的隨機(jī)顏色跳轉(zhuǎn)

    本篇文章主要介紹了js實現(xiàn)九宮格的隨機(jī)顏色跳轉(zhuǎn)的示例代碼,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • 基于原生js實現(xiàn)判斷元素是否有指定class名

    基于原生js實現(xiàn)判斷元素是否有指定class名

    這篇文章主要介紹了基于原生js實現(xiàn)判斷元素是否有指定class名,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • javascript實現(xiàn)手動點贊效果

    javascript實現(xiàn)手動點贊效果

    這篇文章主要為大家詳細(xì)介紹了javascript實現(xiàn)手動點贊效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • JavaScript Map實現(xiàn)原理與底層結(jié)構(gòu)詳解

    JavaScript Map實現(xiàn)原理與底層結(jié)構(gòu)詳解

    哈希表(也稱為哈希表)是一種基于鍵直接訪問內(nèi)存存儲位置的數(shù)據(jù)結(jié)構(gòu)。也就是說,它通過計算一個鍵值函數(shù)來加速查找,該函數(shù)將要查詢的數(shù)據(jù)映射到表中的某個位置。該映射函數(shù)稱為散列函數(shù),記錄數(shù)組稱為散列表
    2022-09-09

最新評論

乐昌市| 古交市| 小金县| 荣昌县| 阳信县| 桂东县| 靖远县| 尚志市| 汶川县| 桃江县| 会昌县| 红桥区| 平江县| 兰溪市| 江津市| 酒泉市| 洪泽县| 柳江县| 台安县| 巴塘县| 泸水县| 盐城市| 罗定市| 花垣县| 福贡县| 三原县| 韩城市| 福泉市| 桐庐县| 深水埗区| 肇东市| 通榆县| 庐江县| 利津县| 榆社县| 泸西县| 昌都县| 彭山县| 江陵县| 长顺县| 锡林浩特市|