成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript字典與集合詳解

3403771864 / 504人閱讀

  今天和大家講講JS“字典”。所謂的JS“字典”其實(shí)和顯示中常用漢語(yǔ)字典不一樣,編程中的字典類似,兩者都有一個(gè)特點(diǎn),就是一一對(duì)應(yīng)(yi yi dui ying),或者說(shuō)是映射。

  日常中的字典通常以**【鍵,值】** 對(duì)的形成存儲(chǔ),主要是由于以鍵值對(duì)的形式存儲(chǔ),這樣的話更有利于可以通過(guò)key來(lái)獲取value

  比如存儲(chǔ)用戶信息:

  {
  'username': '一碗周',
  'age': 18
  }
  JavaScript中的字典

  在JS的字典,其實(shí)就是在ES6中新增Map,并非字典,且map不是翻譯成地圖,而是映射。

  示例代碼如下:

  // 創(chuàng)建一個(gè)字典
  const map = new Map()
  // 往字典中存儲(chǔ)信息
  map.set('username', '一碗周')
  map.set('age', 18)
  console.log(map) // Map(2) { 'username' => '一碗周', 'age' => 18 }

  字典的應(yīng)用實(shí)例

  我們想要將一個(gè)算法題:有效的括號(hào),內(nèi)容就是判斷給定字符串中的括號(hào)是否匹配,匹配返回true,否則返回false。

  解題思路如下:

  對(duì)字符串是否為偶數(shù)要做判斷,當(dāng)不是歐數(shù)值時(shí)返回false,依據(jù)是括號(hào)都是成對(duì)出現(xiàn)的;

  新建一個(gè)棧;

  先遍歷字符串,遍歷到每一項(xiàng)時(shí)如果時(shí)左括號(hào),將其壓入棧;如果是右括號(hào),與棧頂對(duì)比,如果相匹配則出棧,不匹配則返回false。

  我們?cè)瓉?lái)的解法:

  /**
  * @param {string} s
  * @return {boolean}
  */
  var isValid = function(s) {
  if (s.length % 2 !== 0) return false
  const stack = []
  for(let i = 0; i<s.length; i++) {
  const c = s[i] // 記錄當(dāng)前項(xiàng)
  if (c === '(' || c === '[' || c==='{') {
  stack.push(c)
  } else {
  const t = stack[stack.length - 1] // 獲取棧頂元素
  if (
  (t === '(' && c === ')') ||
  (t === '[' && c === ']') ||
  (t === '{' && c === '}')
  ) {
  stack.pop()
  } else {
  return false
  }
  }
  }
  // 如果為0表示全部匹配,有剩余則表示不匹配
  return stack.length === 0
  };

  上面代碼中判斷條實(shí)太長(zhǎng)了,我們需要用字典這個(gè)方式來(lái)優(yōu)化對(duì)應(yīng)寫法,

  實(shí)現(xiàn)代碼如下:

  /**
  * @param {string} s
  * @return {boolean}
  */
  var isValid = function(s) {
  // 1. 判斷字符串的長(zhǎng)度是否為偶數(shù),不為偶數(shù)直接返回false,因?yàn)槔ㄌ?hào)都是成對(duì)出現(xiàn)的;
  if (s.length % 2 !== 0) return false
  const stack = []
  const map = new Map() // 將所有括號(hào)的對(duì)應(yīng)關(guān)系存儲(chǔ)在字典中
  map.set('(', ')')
  map.set('[', ']')
  map.set('{', '}')
  for(let i = 0; i<s.length; i++) {
  const c = s[i] // 記錄當(dāng)前項(xiàng)
  // 判斷是否存在 key 也就是左括號(hào),如果存儲(chǔ),將左括號(hào)存儲(chǔ)在棧中
  if (map.has(c)) {
  stack.push(c)
  } else {
  const t = stack[stack.length - 1] // 獲取棧頂元素
  if (map.get(t) === c) { // 獲取最后一個(gè)左括號(hào),判斷是否與右括號(hào)匹配
  stack.pop() // 出棧
  } else {
  return false
  }
  }
  }
  // 如果為0表示全部匹配,有剩余則表示不匹配
  return stack.length === 0
  };

  上面代碼主要是優(yōu)化if條件判斷語(yǔ)句。

  集合  

  集合是由一組無(wú)序且不重復(fù)的元素構(gòu)成。集合就是無(wú)序且不重復(fù)的特殊數(shù)值,因此就不能通過(guò)下標(biāo)的方式進(jìn)行訪問(wèn),且不會(huì)出現(xiàn)重復(fù)數(shù)值;

  JS中的集合

  在JavaScript中可以為集合提供一個(gè)數(shù)據(jù)結(jié)構(gòu),就是Set,MDN中的描述如下:

  Set對(duì)象是值的集合,意思也就是按照插入的順序迭代它的元素。Set中的元素只會(huì)出現(xiàn)一次,即Set中的元素是唯一的。

  集合中的操作

  在集合中主要有以下場(chǎng)景操作:

  添加元素到集合中;

  在集合中刪除某元素;

  判斷元素是否在集合中;

  清空集合;

  求交集、并集、差集;

  除了最后一種Set對(duì)象就為我們提供了對(duì)應(yīng)的方法,示例代碼如下:

  const arr = [1, 2, 3, 2, 3, 4, 5]
  // 利用set實(shí)現(xiàn)去重
  const set = new Set(arr) // [1, 2, 3, 4, 5]
  // 往集合中添加元素
  set.add(3) // [1, 2, 3, 4, 5] 添加失敗,集合中不允許出現(xiàn)重復(fù)元素
  set.add(6) // [1, 2, 3, 4, 5, 6]
  // 判斷元素是否在集合中
  set.has(2) // true
  set.has(7) // false
  // 刪除集合中的元素
  set.delete(1) // [2, 3, 4, 5, 6]
  // 清空集合
  set.clear()

  交集、并集、差集的封裝

       我們現(xiàn)在來(lái)注釋下:

  并集:對(duì)于給定的兩個(gè)集合,返回一個(gè)包含兩個(gè)集合中所有元素的新集合

  交集:對(duì)于給定的兩個(gè)集合,返回一個(gè)包含兩個(gè)集合中共有元素的新集合

  差集:對(duì)于給定的兩個(gè)集合,返回一個(gè)包含所有存在于第一個(gè)集合且不存在于第二個(gè)集合的元素的新集合

  下圖可以體現(xiàn)三者關(guān)系:

1.png

  封裝代碼如下:

  // 求兩個(gè)集合的并集
  export function union(setA, setB) {
  let _union = new Set(setA)
  for (let elem of setB) {
  _union.add(elem) // 因?yàn)榧现胁淮嬖谥貜?fù)元素
  }
  return _union
  }
  // 求兩個(gè)集合的交集
  export function intersection(setA, setB) {
  let _intersection = new Set()
  for (let elem of setB) {
  if (setA.has(elem)) {
  _intersection.add(elem)
  }
  }
  return _intersection
  }
  // 求兩個(gè)集合的差集
  export function difference(setA, setB) {
  let _difference = new Set(setA)
  for (let elem of setB) {
  _difference.delete(elem)
  }
  return _difference
  }

  其實(shí)封裝的這三個(gè)方法全部利用了集合不能重復(fù)的特性。

      內(nèi)容已講述完畢,后續(xù)更多精彩內(nèi)容,請(qǐng)多多關(guān)注。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/127798.html

相關(guān)文章

  • CSS技巧

    摘要:技巧使你的更加專業(yè)這是上關(guān)于技巧的一篇譯文,另外你也可以在本項(xiàng)目看到原文。列舉了一些很實(shí)用的技巧,比如給空內(nèi)容的標(biāo)簽添加內(nèi)容,逗號(hào)分隔列表等等。排序算法看源碼,把它背下來(lái)吧排序算法的封裝。主要幫助初學(xué)者更好的掌握排序算法的實(shí)現(xiàn)。 成為專業(yè)程序員路上用到的各種優(yōu)秀資料、神器及框架 成為一名專業(yè)程序員的道路上,需要堅(jiān)持練習(xí)、學(xué)習(xí)與積累,技術(shù)方面既要有一定的廣度,更要有自己的深度。 Java...

    DangoSky 評(píng)論0 收藏0
  • CSS技巧

    摘要:技巧使你的更加專業(yè)這是上關(guān)于技巧的一篇譯文,另外你也可以在本項(xiàng)目看到原文。列舉了一些很實(shí)用的技巧,比如給空內(nèi)容的標(biāo)簽添加內(nèi)容,逗號(hào)分隔列表等等。排序算法看源碼,把它背下來(lái)吧排序算法的封裝。主要幫助初學(xué)者更好的掌握排序算法的實(shí)現(xiàn)。 成為專業(yè)程序員路上用到的各種優(yōu)秀資料、神器及框架 成為一名專業(yè)程序員的道路上,需要堅(jiān)持練習(xí)、學(xué)習(xí)與積累,技術(shù)方面既要有一定的廣度,更要有自己的深度。 Java...

    zgbgx 評(píng)論0 收藏0
  • CSS技巧 - 收藏集 - 掘金

    摘要:筆者作為一位,將工作以來(lái)用到的各種優(yōu)秀資料神器及框架整理在此,畢竟好記性不如爛鍵盤,此前端知識(shí)點(diǎn)大百科全書前端掘金,,不定期更新技巧前端掘金技巧,偶爾更新。計(jì)算數(shù)組的極值技巧使你的更加專業(yè)前端掘金一個(gè)幫你提升技巧的收藏集。 CSS 樣式畫各種圖形 - 前端 - 掘金下面是一些我在 CSS 中經(jīng)常用到的圖案,還有一些是在css-tricks看到的。記錄一下,以后會(huì)用到。會(huì)持續(xù)更新… 一、...

    Jonathan Shieber 評(píng)論0 收藏0
  • CSS技巧 - 收藏集 - 掘金

    摘要:筆者作為一位,將工作以來(lái)用到的各種優(yōu)秀資料神器及框架整理在此,畢竟好記性不如爛鍵盤,此前端知識(shí)點(diǎn)大百科全書前端掘金,,不定期更新技巧前端掘金技巧,偶爾更新。計(jì)算數(shù)組的極值技巧使你的更加專業(yè)前端掘金一個(gè)幫你提升技巧的收藏集。 CSS 樣式畫各種圖形 - 前端 - 掘金下面是一些我在 CSS 中經(jīng)常用到的圖案,還有一些是在css-tricks看到的。記錄一下,以后會(huì)用到。會(huì)持續(xù)更新… 一、...

    SHERlocked93 評(píng)論0 收藏0
  • JavaScript學(xué)習(xí)總結(jié)(六)數(shù)據(jù)類型和JSON格式

    摘要:并列數(shù)據(jù)的集合數(shù)組用方括號(hào)表示。第三種類型是映射,也就是一個(gè)名值對(duì),即數(shù)據(jù)有一個(gè)名稱,還有一個(gè)與之相對(duì)應(yīng)的值,這又稱作散列或字典,比如首都北京。中有種簡(jiǎn)單數(shù)據(jù)類型也稱為基本數(shù)據(jù)類型和。數(shù)值布爾值對(duì)象和字符串值都有方法。 什么是JSON JSON:JavaScript 對(duì)象表示法(JavaScript Object Notation)。 JSON的形式是用大括號(hào){}包圍起來(lái)的項(xiàng)目列表...

    laznrbfe 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<