欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS利用map整合雙數(shù)組的小技巧分享

 更新時(shí)間:2021年08月18日 16:10:44   作者:WeepingBoy  
Map是一組鍵值對的結(jié)構(gòu),具有極快的查找速度,下面這篇文章主要給大家介紹了關(guān)于JS利用map整合雙數(shù)組的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

最近因公司業(yè)務(wù)需求編寫ECharts圖表展示相關(guān)公司階段型業(yè)務(wù)相關(guān)數(shù)據(jù)變化,需要服務(wù)端進(jìn)行數(shù)據(jù)查詢返回給前端進(jìn)行數(shù)據(jù)展示。但是由于反回的數(shù)據(jù)不便于前端 ECharts展示所以需要進(jìn)行數(shù)據(jù)整合,奈何本人經(jīng)驗(yàn)不足只能請教公司大佬,在大佬幫助下完成了數(shù)據(jù)整合,并學(xué)到一個(gè)前所未聞的合并方法今天分享給大家。

模擬數(shù)據(jù)

下圖是將要被合并的兩數(shù)組

合并后數(shù)據(jù)

合并后數(shù)據(jù)要求以時(shí)間為唯一的key進(jìn)行合并雙數(shù)組內(nèi)的對象,對象內(nèi)的值有則展示無則初始化本對象沒有的key并初始化值為0(如果表達(dá)不清晰下方是最后合并的數(shù)據(jù))

合并思路

本次合并所用到的了js的mapp技術(shù),既然是以時(shí)間作為唯一的key所以要遍歷數(shù)組一來初始化一個(gè)以時(shí)間為key的一個(gè)map然后遍歷數(shù)組二進(jìn)行數(shù)據(jù)互補(bǔ)再將處理完的map轉(zhuǎn)換成數(shù)組就ok了

代碼展示&解析

第一步

先聲明模擬數(shù)據(jù)和創(chuàng)建一個(gè)空對象用承載map

      //模擬數(shù)據(jù) arr1
      let testArrOne = [
        { date: "2021-8-11", testNumOne: 1 },
        { date: "2021-8-12", testNumOne: 2 },
        { date: "2021-8-13", testNumOne: 3 },
      ];
      //模擬數(shù)據(jù) arr2
      let testArrTwo = [
        { date: "2021-8-12", testNumTwo: 2 },
        { date: "2021-8-14", testNumTwo: 4 },
        { date: "2021-8-15", testNumTwo: 5 },
      ];
      //合并方法
      let testMap = {}; //首先聲明一個(gè)空對象作作為 map

第二步

遍歷數(shù)組一進(jìn)行map初始化

   //遍歷第一個(gè)數(shù)組
      testArrOne.forEach((item) => {
        testMap[item.date] = {
          date: item.date, //初始化時(shí)間
          testNumOne: item.testNumOne || 0, //初始化測試數(shù)據(jù)一
          testNumTwo: 0,  //初始化測試數(shù)據(jù)二
        };
      });
  

然后我們就得到了一個(gè)以時(shí)間作為唯一key的map 我們打印得到下圖數(shù)據(jù)

第三步

遍歷數(shù)組二進(jìn)行相關(guān)賦值和初始化操作

    //遍歷第二個(gè)數(shù)組
      testArrTwo.forEach((item) => {
       //如果發(fā)現(xiàn)數(shù)組一包含時(shí)間的map對象就復(fù)制如若發(fā)現(xiàn)新時(shí)間進(jìn)行初始化賦值空對象
        testMap[item.date] = testMap[item.date] || {}; 
       //賦值時(shí)間
        testMap[item.date].date = item.date;
        //賦值測試數(shù)據(jù)一如果沒有就初始化
        testMap[item.date].testNumOne = testMap[item.date].testNumOne || 0;
        //輔助測試數(shù)據(jù)二
        testMap[item.date].testNumTwo = item.testNumTwo;
      });

打印下map得到整合好的對象 如下

第四步

將 map 轉(zhuǎn)成 arr 就大功告成了

 this.listMapUtils.map2List(testMap);

下面是封裝好的 map 與 arr 相互轉(zhuǎn)換的代碼

      listMapUtils: {
      //arr轉(zhuǎn)map方法
        list2Map: function(list, key) {
          let map = {};
          if (list && Array.isArray(list) && list.length > 0) {
            list.forEach((item) => {
              item[key] ? (map[item[key]] = item) : "";
            });
          }
          return map;
        },
        //map 轉(zhuǎn) arr 方法
        map2List: function(map) {
          let list = [];
          if (map && typeof map === "object") {
            for (let key in map) {
              list.push(map[key]);
            }
          }
          return list;
        },
      },


全部代碼

因?yàn)榉奖阏故?map arr 互轉(zhuǎn)的方法我就在data里申明了 同學(xué)們還是不要這樣寫身為前端還是要有模塊化思想的

<template>
  <div></div>
</template>

<script>
export default {
  name: "App",
  data() {
    return {
      listMapUtils: {
        list2Map: function(list, key) {
          let map = {};
          if (list && Array.isArray(list) && list.length > 0) {
            list.forEach((item) => {
              item[key] ? (map[item[key]] = item) : "";
            });
          }
          return map;
        },
        map2List: function(map) {
          let list = [];
          if (map && typeof map === "object") {
            for (let key in map) {
              list.push(map[key]);
            }
          }
          return list;
        },
      },
    };
  },
  created() {
    this.mergeArr();
  },
  methods: {
    mergeArr() {
      //模擬數(shù)據(jù) arr1
      let testArrOne = [
        { date: "2021-8-11", testNumOne: 1 },
        { date: "2021-8-12", testNumOne: 2 },
        { date: "2021-8-13", testNumOne: 3 },
      ];
      //模擬數(shù)據(jù) arr2
      let testArrTwo = [
        { date: "2021-8-12", testNumTwo: 2 },
        { date: "2021-8-14", testNumTwo: 4 },
        { date: "2021-8-15", testNumTwo: 5 },
      ];

      //合并方法

      let testMap = {}; //首先聲明一個(gè)空對象作作為 map

      //遍歷第一給數(shù)組
      testArrOne.forEach((item) => {
        testMap[item.date] = {
          date: item.date,
          testNumOne: item.testNumOne || 0,
          testNumTwo: 0,
        };
      });

      testArrTwo.forEach((item) => {
        testMap[item.date] = testMap[item.date] || {}; //初始化對象
        testMap[item.date].date = item.date;
        testMap[item.date].testNumOne = testMap[item.date].testNumOne || 0;
        testMap[item.date].testNumTwo = item.testNumTwo;
      });
      
      //map 轉(zhuǎn) arr
      this.listMapUtils.map2List(testMap);
      //得到最后結(jié)果
      console.log(this.listMapUtils.map2List(testMap));
    },
  },
};
</script>

<style></style>

總結(jié)

到此這篇關(guān)于JS利用map整合雙數(shù)組的文章就介紹到這了,更多相關(guān)JS整合雙數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • TypeScript學(xué)習(xí)筆記之類型縮小

    TypeScript學(xué)習(xí)筆記之類型縮小

    在TypeScript中若一個(gè)變量使用了聯(lián)合類型,那么當(dāng)我們使用該變量時(shí)必不可少的會去明確的限制該變量的具體類型,這稱為類型縮小,這篇文章主要給大家介紹了關(guān)于TypeScript學(xué)習(xí)筆記之類型縮小的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • JS實(shí)現(xiàn)圖片幻燈片效果代碼實(shí)例

    JS實(shí)現(xiàn)圖片幻燈片效果代碼實(shí)例

    這篇文章主要介紹了JS實(shí)現(xiàn)圖片幻燈片效果代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • JavaScript 實(shí)現(xiàn)網(wǎng)頁打印處理

    JavaScript 實(shí)現(xiàn)網(wǎng)頁打印處理

    JavaScript 實(shí)現(xiàn)網(wǎng)頁打印處理...
    2007-04-04
  • 原生js頁面滾動延遲加載圖片

    原生js頁面滾動延遲加載圖片

    這篇文章主要介紹了原生js頁面滾動延遲加載圖片的相關(guān)資料,現(xiàn)在瀑布流效果大行其道,各種網(wǎng)站都有應(yīng)用,尤其是專業(yè)的圖片類型的網(wǎng)站,感興趣的朋友可以參考下
    2015-12-12
  • JS寫XSS cookie stealer來竊取密碼的步驟詳解

    JS寫XSS cookie stealer來竊取密碼的步驟詳解

    JavaScript是web中最常用的腳本開發(fā)語言,js可以自動執(zhí)行站點(diǎn)組件,管理站點(diǎn)內(nèi)容,在web業(yè)內(nèi)實(shí)現(xiàn)其他有用的函數(shù)。這篇文章主要介紹了JS寫XSS cookie stealer來竊取密碼的步驟詳解,需要的朋友可以參考下
    2017-11-11
  • 用JavaScript檢查大寫鍵(Caps Lock)是否打開的腳本

    用JavaScript檢查大寫鍵(Caps Lock)是否打開的腳本

    用JavaScript檢查大寫鍵(Caps Lock)是否打開的腳本...
    2007-06-06
  • 微信小程序開發(fā)之IOS和Android兼容的問題

    微信小程序開發(fā)之IOS和Android兼容的問題

    這篇文章主要介紹了微信小程序開發(fā)之IOS和Android兼容的問題的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • 淺談原生JS中的延遲腳本和異步腳本

    淺談原生JS中的延遲腳本和異步腳本

    下面小編就為大家?guī)硪黄獪\談原生JS中的延遲腳本和異步腳本。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • javascript對象的property和prototype是這樣一種關(guān)系

    javascript對象的property和prototype是這樣一種關(guān)系

    javascript對象的property和prototype是這樣一種關(guān)系...
    2007-03-03
  • 微信小程序獲取頭像和昵稱的最新方法(直接用!)

    微信小程序獲取頭像和昵稱的最新方法(直接用!)

    微信小程序最新獲取頭像信息之前是使用open-dada獲取微信頭像和昵稱,但是后面由于官網(wǎng)更新,此方法被收回了,所以不能使用此方法了,下面這篇文章主要給大家介紹了關(guān)于微信小程序獲取頭像和昵稱的最新方法,本文介紹的方法可以直接拿來用,需要的朋友可以參考下
    2023-05-05

最新評論