1. 程式人生 > >JavaScript陣列方法綜合應用案例

JavaScript陣列方法綜合應用案例

業務背景:
專案上有一個價格庫的概念,對應於某個地區的某個時間段。即:在某年的某個季度或者月份,專案公司會對各個地區建立該地區的人工、材料、機械的價格庫。
呈現檢視如下:
這裡寫圖片描述

資料庫設計

對於上面的業務,由於地區和價格期數是作為字典維護的,有獨立的前端模組進行維護,所以需要獨立建表。
同時,出於效率方面的考慮,未採用物理外來鍵,使用了邏輯外來鍵,由程式全權保證業務邏輯的正確性和完整性。
最終的表結構如下圖所示:
這裡寫圖片描述

後臺介面

專案採用前後端分離的結構,後臺提供CRUD介面,前臺進行邏輯呈現。後端採用SpringBoot構建微服務體系,前臺為使用vue框架的SPA應用。
後臺提供Restful API介面,並通過Swagger提供前端開發人員進行查詢和聯調的介面文件介面及聯調工具。

地區介面

這裡寫圖片描述

價格期數介面

這裡寫圖片描述

價格庫介面

這裡寫圖片描述
價格庫中,除了基礎的增刪改查介面之外,還有帶字典獲取列表的介面(即一個請求同時獲取到價格庫及地區字典、價格期數字典);另外,還有按照價格期數執行使能切換的介面。

前端呈現實現

前端呈現的一個複雜之處在於:
1. 將原本的無層級記錄列表呈現為帶層級的邏輯檢視;
2. 一級記錄為從原本記錄中構造出來的交集;
3. 二級記錄需要與一級記錄構建層級關係;
4. 存在過濾狀態(即按照關鍵字進行過濾的狀態);

為此,作如下的處理:
1 三級請求獲取資料(鑑於帶字典請求資料的介面與目前的前端公共介面不相容,因此暫時採用三級序列請求的方式):

function(currentItemId) {
        var vueObj = this;
        // 一級請求,請求價格期數資料
        periodModel().getTableDatas(function(items) {
          vueObj.periods = items;
          items.forEach(function(item) {
            vueObj.periodMap[item.id] = item.description;
          });
          // 二級請求,請求地區資料
regionModel().getTableDatas(function(items) { vueObj.regions = items; items.forEach(function(item) { vueObj.regionMap[item.id] = item.description; }); // 三級請求,請求價格庫資料 resPriceDBModel().getTableDatas(function(items) { vueObj.moving = false; vueObj.doFormatDisplayData(items); // 資料獲取完成並進行修飾構造後,通過handsonTable進行呈現 vueObj.$refs.table.$emit('show-grid', vueObj.tableData(), vueObj.fieldList, vueObj.getEditStyle, true, vueObj.getAlignment, 'all'); vueObj.setCurrentRow(currentItemId); }, function(errMsg) { vueObj.moving = false; vueObj.$message({message: errMsg, type: 'error'}); }); }, function(errMsg) { vueObj.moving = false; vueObj.$message({message: errMsg, type: 'error'}); }); }, function(errMsg) { vueObj.moving = false; vueObj.$message({message: errMsg, type: 'error'}); }); }

2 其中,最關鍵的方式是doFormatDisplayData,該方法構造出最終呈現的資料檢視;
演算法邏輯為:
① 遍歷獲取到的價格庫記錄陣列,按照需要填充前臺呈現所需資料(採用陣列的map方法);
② 如果處於過濾狀態,則對構造後的陣列執行過濾處理(採用陣列的filter方法);
③ 對於構造後的陣列執行排序(按照價格期數排序,採用陣列的sort方法);
④ 通過構造後的陣列,提取出一級記錄的map(採用陣列的reduce方法);
⑤ 將構造後的資料填充到handsonTable呈現對應的陣列物件,對於一級記錄直接壓入(採用陣列的push方法);
⑥ 對於二級記錄,則將原資料陣列進行slice處理提取出一級記錄對應的子記錄,然後呼叫forEach方法將各記錄壓入陣列(採用陣列的slice及forEach方法)。

function(items) {
        var vueObj = this;
        var keyword = vueObj.keyword;
        var datas = [];
        if (vueObj.inSearch) {
          datas = items.map(vueObj.makeupResPriceDB).filter(function(item) {
            return (item.period && item.period.indexOf(keyword) >= 0) ||
            (item.region && item.region.indexOf(keyword) >= 0) ||
            (item.auditor && item.auditor.indexOf(keyword) >= 0);
          }).sort(vueObj.doCompareResPriceDB);
        } else {
          datas = items.map(vueObj.makeupResPriceDB).sort(vueObj.doCompareResPriceDB);
        }
        var periodMap = datas.reduce(function (prevResult, currItem) {
          if (prevResult.has(currItem.period_id)) {
            prevResult.get(currItem.period_id).childCount += 1;
          } else {
            var periodObj = vueObj.makeupParentPeriodRec(currItem.period_id, currItem.enabled);
            prevResult.set(currItem.period_id, periodObj);
          }
          return prevResult;
        }, new Map());
        dataStore[vueObj._uid].tableData = [];
        var startIndex = 0;
        for (var value of periodMap.values()) {
          dataStore[vueObj._uid].tableData.push(value);
          datas.slice(startIndex, startIndex + value.childCount).forEach(function(data) {
            dataStore[vueObj._uid].tableData.push(data);
          });
          startIndex += value.childCount;
        }
      }

如上可知,該部分檢視的構造邏輯還是有一些複雜的,其中綜合運用了陣列的各個方法,也算是對於JS陣列的一次學習應用了。

JS陣列方法總結

XMind總結陣列方法,如下三張圖:
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

相關推薦

JavaScript陣列方法綜合應用案例

業務背景: 專案上有一個價格庫的概念,對應於某個地區的某個時間段。即:在某年的某個季度或者月份,專案公司會對各個地區建立該地區的人工、材料、機械的價格庫。 呈現檢視如下: 資料庫設計 對於上面的業務,由於地區和價格期數是作為字典維護的,有獨立的前端模

很經典的綜合應用案例

hsrp備份技術 vlan技術 trunk很經典的綜合應用案例

Squid代理服務器綜合應用案例

linu 正向代理 p地址 概念 cache 訪問 密碼文件 客戶機 var squid代理服務器 squid是一種用來緩存Internet數據的軟件。接受來自客戶機需要下載的目標的請求並適當的處理這些請求。也就是說,如果一個客戶端想要打開默認網站,它請求squid為它取

JavaScript 陣列方法總結

內建方法Array from 將其他遍歷物件轉換為陣列 isArray判斷是否陣列 of建立陣列 原型方法Arrayprot

JavaScript陣列方法陣列檢測方法

方法總覽 concat 連線兩個或者更多陣列,並返回結果 var array = [1,3,4]; var array2 = [2, 4, 6]; array.concat(array2); //

JavaScript陣列方法總結

一.建立陣列的方式 1.使用Array建構函式 var color=new Array();     注意:括號裡面引數可以有引數,若為一個數字,表示該陣列的長度,如果為多個數字或者一個(多個)非數字表示的是傳遞陣列中應該包含的值。 2.使用陣列字面量 var co

Hive SQL 綜合應用案例實戰及多項效能指標深入講解-DW商業環境實戰

版權宣告:本套技術專欄是作者(秦凱新)平時工作的總結和昇華,通過從真實商業環境抽取案例進行總結和分享,並給出商業應用的調優建議和叢集環境容量規劃等內容,請持續關注本套部落格。QQ郵箱地址:[email protected],如有任何技術交流,可隨時聯絡。 1:order by, sort by,

JavaScript 陣列方法集合及示例!

陣列基礎知識 你應該知道陣列是什麼,但以下是一個簡單的概述:陣列就像放東西的盒子,你可以放進東西(新增),拿出東西(刪除)或者擺放它們的位置及拿出我們想要的東西。 陣列的建立 以下是建立陣列的幾種方式: 陣列的新增和刪除 常用的方法 對常見場景的概述以及用於每個場

javascript陣列方法

一.陣列物件作用:使用單獨的變數名來儲存一系列的值。JavaScript中建立陣列有兩種方式(一)使用 Array 建構函式:var arr1 = new Array(); //建立一個空陣列var arr2 = new Array(20); // 建立一個包含20項的陣列v

JavaScript陣列方法總結篇

方法在陣列的尾部新增一個或多個元素,並返回陣列的長度 引數: item1, item2, …, itemX ,要新增到陣列末尾的元素 let arr = [1,2,3]; let length = arr.push('末尾1','末尾2'); // 返回陣列長度 con

JavaScript 陣列方法

ECMAScript 3在Array.prototype中定義了一些很有用的運算元組的函式: Array.join()方法將陣列中所有元素轉化為字串並連線在一起: var a = [1,2,3];                           // 建立一個包含三個

JavaScript 陣列方法大全

陣列在筆試題中出現的概率最高的型別之一,JavaScript中的陣列與其他語言中的陣列有些區別,為了方便以後檢視陣列的方法,現將對陣列的操作方法進行彙總整理。 陣列建立 JavaScript中建立陣列有兩種方式,第一種是使用 Array 建構函式:

JavaScript陣列方法詳解

JavaScript陣列方法詳解 JavaScript中陣列的方法種類眾多,在ES3-ES7不同版本時期都有新方法;並且陣列的方法還有原型方法和從object繼承的方法,這裡我們只介紹陣列在每個版本中原型上的方法,本文舉例介紹了從ES3到ES7幾乎所有的陣列方法。這大概是最全的陣列方法詳解了。希望讀者能從中有

day27—JavaScript實現定時器及其應用案例

scrip tin 定時 定時器對象 延遲 day 方法 fun value 轉行學開發,代碼100天——2018-04-12 JavaScript中定時器有兩種,分別是setInterval和setTimeout;其用法如下: 開啟: setTimeout("fun

JavaScript 陣列常用方法

有一天被問到了一個題,感覺很有意思,如下: new Array(6) new Array(6, 6) //上訴兩行程式碼,分別建立了什麼? 檢測陣列 var arr = []; arr instanceof Array Array.isArray(a

javascript 陣列 常用方法

 前言    學學忘忘  閒來做個筆記 整理下陣列常用方法。    Array 陣列常用方法    建立陣列的基本方式有兩種       1.第一種是使用Array建構函式,  var arr = new Array()

原聲JS中indexOf()方法陣列中的應用

定義和用法 indexOf() 方法可返回某個指定的字串值在字串中首次出現的位置。 提示和註釋 註釋:indexOf() 方法對大小寫敏感! 註釋:如果要檢索的字串值沒有出現,則該方法返回 -1。 註釋:字元位置是從 0 開

javascript常用陣列方法

1、join()方法:  Array.join()方法將陣列中所以元素都轉化為字串連結在一起,返回最後生成的字串。也可以指定可選的字串在生成的字串中來分隔陣列的各個元素。如果不指定分隔符,預設使用逗號。案例如下: ? 1 2 3 4 va

JavaScript陣列常用方法2

1.forEach()方法列出每個元素 <button onclick="numbers.forEach(myFunction)">點我</button> <p id="demo"></p> <script> demoP = do

JavaScript陣列去重的四種方法

今天,剛剛參加了公司的筆試,關於陣列去重,後來簡單總結了幾種方法,希共勉,為我打call....... es5四種方式: 方式一: Array.prototype.unique1 = function() { // 1. 定義陣列 var temp = []; // 2. 遍歷當前陣列 f