js的去重

原理:利用對象屬性唯一

1.簡單的數(shù)組去重

const arr = [1,1,1,1,1,3,3,3,3,4,5,6,7,'q','q','a','c']
const map = {} // 作為檢驗標(biāo)準(zhǔn)
const myArr = [] //去重后的新數(shù)組
for (let i = 0;i<arr.length;i++){
   const ai = arr[i]
   //通過map的屬性名過濾數(shù)組中的值
   //如果對象map屬性(ai)不存在,說明出現(xiàn)了新的值
   if(!map[ai]){
    //給map對象賦值
    //{ ai : i }
      map[ai] = i 
      //把新的值賦予我的數(shù)組
      myArr.push(ai)
    }
 }
console.log(myArr)//[1, 3, 4, 5, 6, 7, "q", "a", "c"]

2.開發(fā)中的運用:利用相同的屬性合并數(shù)據(jù)
有時候,從后端接收的數(shù)據(jù)中有重復(fù)的,此時就需要去重
比如,接收到一組json數(shù)據(jù):

 [
    {
      Account: "11111111",
      ExperimentName: "農(nóng)學(xué)實驗",
      UserName: "小王",
      class: "1",
      major: "農(nóng)學(xué)"
    },
    {
      Account: "11111111",
      ExperimentName: "化學(xué)實驗",
      UserName: "小王",
      class: "1",
      major: "農(nóng)學(xué)"
    },
    {
      Account: "22222222",
      ExperimentName: "農(nóng)學(xué)實驗",
      UserName: "小紅",
      class: "1",
      major: "農(nóng)學(xué)"
    },
    {
      Account: "22222222",
      ExperimentName: "化學(xué)實驗",
      UserName: "小紅",
      class: "1",
      major: "農(nóng)學(xué)"
    },
    {
      Account: "33333333",
      ExperimentName: "農(nóng)學(xué)實驗",
      UserName: "小明",
      class: "1",
      major: "農(nóng)學(xué)"
    },
    {
      Account: "33333333",
      ExperimentName: "化學(xué)實驗",
      UserName: "小明",
      class: "163",
      major: "農(nóng)學(xué)",
    },
    {
      Account: "44444444",
      ExperimentName: "農(nóng)學(xué)實驗",
      UserName: "小花",
      class: "1",
      major: "農(nóng)學(xué)"
    },
    {
      Account: "44444444",
      ExperimentName: "化學(xué)實驗",
      UserName: "小花",
      class: "1",
      major: "農(nóng)學(xué)",
    }
  ]

需要我們整合相同的學(xué)生
js方法為:

let formatData = function(status){
    //我們需要的數(shù)據(jù)數(shù)組
    const courseData = []
   //用來檢驗?zāi)骋粚傩允欠裰貜?fù)
    const map = {}
   //合并后的數(shù)據(jù)數(shù)組
    const course = []
    for (let i = 0; i < status.length; i++) {
      const ai = status[i]
      //當(dāng)賬號相同時我們合并數(shù)據(jù)
      if (!map[ai.Account]) {
        course.push({
          Account: ai.Account,
         //對數(shù)據(jù)進(jìn)行挑選,只選自己需要的數(shù)據(jù)
          data: [{
            Account : ai.Account,
            UserName: ai.UserName,
            class: ai.class,
            major: ai.major
          }]
        })
        map[ai.Account] = ai
      }
    }
    //獲取我們想要的數(shù)據(jù)部分
    course.forEach(item => {
     courseData.push(item.data[0])
    })
    console.log(courseData)
  }

3.使用ES6新特性
把某一屬性值相同的數(shù)據(jù)過濾,只留一條
我用Account屬性過濾

function formatData(status) {
  const res = new Map();
  const myData = status.filter((a) => !res.has(a.Account) && res.set(a.Account, 1))
  console.log(myData)
}

Map:


image.png

注釋:
Map對象:http://www.itdecent.cn/p/204c04ba8abc
filter方法:http://www.itdecent.cn/p/efc748a1b4ce
has方法:http://www.itdecent.cn/p/3ae1aa18e8bb
set方法:http://www.itdecent.cn/p/3e8a6b38c149

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 概要 64學(xué)時 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,876評論 0 3
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,675評論 1 32
  • 面試題一:https://github.com/jimuyouyou/node-interview-questio...
    R_X閱讀 1,776評論 0 5
  • 本文為阮一峰大神的《ECMAScript 6 入門》的個人版提純! babel babel負(fù)責(zé)將JS高級語法轉(zhuǎn)義,...
    Devildi已被占用閱讀 2,134評論 0 4
  • 前端開發(fā)面試題 面試題目: 根據(jù)你的等級和職位的變化,入門級到專家級,廣度和深度都會有所增加。 題目類型: 理論知...
    怡寶丶閱讀 2,687評論 0 7

友情鏈接更多精彩內(nèi)容