首頁  >  文章  >  web前端  >  常用的js讀寫檔案排序詳解

常用的js讀寫檔案排序詳解

小云云
小云云原創
2018-03-17 16:45:241555瀏覽

最近寫js發現很多規則跟自己想的不一樣,畢竟剛上手不就,所以繞了很多彎彎,這裡總結記錄下,本文主要和大家分享常用的js讀寫文件排序詳解,希望能幫助大家。

1,由於file標籤上傳時:onchange方法在再次上傳相同檔案不在被觸發
想要被觸發的方法:

   $("#file").on("change", function (evt) {
        var fileExtend = fileName.substring(file.value.lastIndexOf('.'));
        //获取文件后缀  .zip/.png为了方便比较还可以把她转为小写.....
        this.value = '';
        //为了能持续触发onchange 因为当value值相同就不会再触发 特别是点击返回按钮过来的情况
    });

2,讀取file上傳的檔案信息

$("#file").on("change", function () {
        var files = $(this).prop('files');        var reader = new FileReader();
        reader.readAsText(files[0], "UTF-8");//读取文件
        reader.onload = function (evt) {
            var fileString = evt.target.result; // 读取文件内容  
    }

3,產生本地檔案

<a onfocus="this.blur();" style="display: none" id="createInvoteBtn" class="ipt-todo" href="javascript:void(0)">生成并导出Txt文件</a>
<a onfocus="this.blur();" style="display: none" id="createInvote" class="ipt-todo hide">code</a>

为了兼容IE请把上述标签写上,由于display:none所以不影响网页内容/**
*fileName  文件名
*fileData 需要写入文件的内容
*/
     function generateFile(fileName,fileData){          var isIE = (navigator.userAgent.indexOf(&#39;MSIE&#39;) >= 0);//是否是IE浏览器
            if (isIE) {                var winSave = window.open();
                winSave.document.open("text", "utf-8");
                winSave.document.write(fileData);
                winSave.document.execCommand("SaveAs", true, fileName);
                winSave.close();
            } else {                var mimeType = &#39;text/plain&#39;;
                $(&#39;#createInvote&#39;).attr(&#39;href&#39;, &#39;data:&#39; + mimeType + &#39;;charset=utf-8,&#39; + encodeURIComponent(fileData));                var btn = document.getElementById(&#39;createInvote&#39;);
                btn.download = fileName;
                document.getElementById(&#39;createInvote&#39;).click();//为了触发createInvote
            }
        }

4,根據map(key,value)的value重大到小遞歸排序map

/**
*map 是需要排序的对象
*newMap 排序后的map对象
*/

  var newMap = {};
 function orderMapByvalue(map) {        if (JSON.stringify(map) == "{}") {        //doSomething
            return newMap;//注意for(key in map)是异步遍历,所以对newMap的操作最好在return前
        }        for (key1 in map) {//只是为了获得第一组的key value 遍历一次就会break
            var tempKey = key1;            var tempValue = map[key1];            for (key2 in map) {                if (map[key2] - tempValue >= 0) {//这里是排序规则 根据需求改变
                    tempKey = key2;//接受value最大的key
                    tempValue = map[tempKey];//最大的value
                }
            }
           newMap[tempKey] =tempValue;//注意如果key是数字无论是你是什么时候插入 1还是"1" 系统会自动根据数字的大小重新排序,我这里的key不是纯数字,所以没问题
            delete map[tempKey];            break;//break是为了只for一次,毕竟js我没找到直接获取map第一个元素对的方法,只能这样来获取map里的第一组数据
        }
        orderMapByvalue(map);
    }

               

##最近寫js發現很多規則跟自己想的不一樣,畢竟剛上手不就,所以繞了很多彎彎,這裡總結記錄下

1,由於file標籤上傳時:onchange方法在再次上傳相同文件不在被觸發

想要被觸發的方法:

   $("#file").on("change", function (evt) {
        var fileExtend = fileName.substring(file.value.lastIndexOf(&#39;.&#39;));//获取文件后缀  .zip/.png为了方便比较还可以把她转为小写.....
        this.value = &#39;&#39;;//为了能持续触发onchange 因为当value值相同就不会再触发 特别是点击返回按钮过来的情况
    });

2,讀取file上傳的檔案資訊

$("#file").on("change", function () {
        var files = $(this).prop(&#39;files&#39;);        var reader = new FileReader();
        reader.readAsText(files[0], "UTF-8");//读取文件
        reader.onload = function (evt) {
            var fileString = evt.target.result; // 读取文件内容  
    }

3,產生本機檔案

<a onfocus="this.blur();" style="display: none" id="createInvoteBtn" class="ipt-todo" href="javascript:void(0)">生成并导出Txt文件</a>
<a onfocus="this.blur();" style="display: none" id="createInvote" class="ipt-todo hide">code</a>

为了兼容IE请把上述标签写上,由于display:none所以不影响网页内容/**
*fileName  文件名
*fileData 需要写入文件的内容
*/
     function generateFile(fileName,fileData){          var isIE = (navigator.userAgent.indexOf(&#39;MSIE&#39;) >= 0);//是否是IE浏览器
            if (isIE) {                var winSave = window.open();
                winSave.document.open("text", "utf-8");
                winSave.document.write(fileData);
                winSave.document.execCommand("SaveAs", true, fileName);
                winSave.close();
            } else {                var mimeType = &#39;text/plain&#39;;
                $(&#39;#createInvote&#39;).attr(&#39;href&#39;, &#39;data:&#39; + mimeType + &#39;;charset=utf-8,&#39; + encodeURIComponent(fileData));                var btn = document.getElementById(&#39;createInvote&#39;);
                btn.download = fileName;
                document.getElementById(&#39;createInvote&#39;).click();//为了触发createInvote
            }
        }

4,根據map(key,value)的value重大到小遞歸排序map

/**
*map 是需要排序的对象
*newMap 排序后的map对象
*/

  var newMap = {};
 function orderMapByvalue(map) {        if (JSON.stringify(map) == "{}") {        //doSomething
            return newMap;//注意for(key in map)是异步遍历,所以对newMap的操作最好在return前
        }        for (key1 in map) {//只是为了获得第一组的key value 遍历一次就会break
            var tempKey = key1;            var tempValue = map[key1];            for (key2 in map) {                if (map[key2] - tempValue >= 0) {//这里是排序规则 根据需求改变
                    tempKey = key2;//接受value最大的key
                    tempValue = map[tempKey];//最大的value
                }
            }
           newMap[tempKey] =tempValue;//注意如果key是数字无论是你是什么时候插入 1还是"1" 系统会自动根据数字的大小重新排序,我这里的key不是纯数字,所以没问题
            delete map[tempKey];            break;//break是为了只for一次,毕竟js我没找到直接获取map第一个元素对的方法,只能这样来获取map里的第一组数据
        }
        orderMapByvalue(map);
    }

相關推薦:

##PHP並發讀寫檔案如何解決

PHP讀寫檔案程式碼

php 讀寫檔案的實作程式碼

以上是常用的js讀寫檔案排序詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn