ES6中的迭代器和set、map集合

什么是迭代器?

一種機制,也是一種接口,為數據結構提供統一訪問接口,依次處理數據據結構成員?
? 只要實現了迭代器接口,就可以使用for...of循環遍歷。

/*** 迭代器是一種機制 是一種接口 只要數據解構實現了接口 就可以使用for ...of遍歷*/
// 遍歷字符串  str = 'hello'
/*** 1.for 循環* 2.for in循環 * 3.split('')* 4.Array.from()* 5.Array.prototype.slice.call(str,0)* 6.[...res] = str;* 7.for of循環遍歷字符串*/
let str = 'hello';
for(let key of str){console.log(key);
}for(let i=0;i<str.length;i++){console.log(i,str[i])
}
for(let key in str){console.log(key,str[key]);
}


? 迭代器本質就是迭代器對象調用next方法,迭代對象理解為指針對象,指針指向數據結構成員
? 第一次調用指向第一個成員 依次調用指向后面成員 。

let arr = ['terry','larry','ronda','jacky','briup'];
let keys = arr.keys();//返回值是迭代器對象 實現了迭代器接口 for ...of遍歷 
let values = arr.values();
let entries = arr.entries();
console.log(keys,values,entries);
// console.log(keys);
/*** 迭代器本質就是迭代器對象調用得next方法 迭代器對象創建一個指針 指向數據結構首位成員位置* 第一次調用指向第一個成員 依次調用依次指向后面成員*/
console.log(keys.next());//{ value: 0, done: false }
console.log(keys.next());//{ value: 1, done: false }
console.log(keys.next());//{ value: 2, done: false }
console.log(keys.next());//{ value: 3, done: false }
console.log(keys.next());//{ value: 4, done: false }
let result;
while(!(result=keys.next()).done){console.log(result)
}
for(let key of keys){console.log(key);
}
for(let value of values){console.log(value);
}
for(let entry of entries){console.log(entry);
}
console.log(values.next());
console.log(entries.next());function foo(){for(let key of arguments){console.log(key);}
}
foo(1,2,3,4)
let arr1 = [1,2,3,4];
for(let key of arr1){console.log(key,'222');
}
let obj = {name:'zhangsan',age:12,gender:'male'
}
for(let key of obj){console.log(key,'333');
}

set集合?

? 類似于數組,特點內部成員不會重復,Set構造函數創建set集合,接收參數實現了迭代器接口數據結構
? ????????key和value一致

? 1.添加成員

? set.add('hello')
? set.add(10)
? set.add(null);
? set.add('hello');//不會被添加?
? set.add([]);
? set.add([]);//會被依次添加

? 2.刪除成員?

? set.delete('hello');
? set.delete(arr);

? 3.清空成員

? set.clear();

? 4.遍歷成員?

? set.forEach((key,value)=>{

? })

? 5.keys ?獲取key值組成數組

? ? values 獲取value值組成數組
? ? entries 獲取key value組成數組

? 6.獲取成員個數?

? set.size?

? 7.檢測set有沒有次成員?

? set.has('hello');

? 可以用set來進行數組去重復?
/*** set 類似于數組  使用Set構造函數創建  key和value是一致得* 特點:成員的值都是唯一得 參數:數組或者實現了迭代器接口對象*/
// let set = new Set([1,2,3,4,3,2,1]);
// let set1 = new Set('hello');
// // let set2 = new Set({name:'zhangsan'});報錯 
// console.log(set,set1);
let set = new Set();
// 添加成員 add
set.add('hello');
set.add(10);
set.add('hello');
let arr = [];
set.add(arr);
set.add([]);
// console.log(set);
// 刪除成員 delete 
// console.log(set.delete('hello'));
// console.log(set.delete(arr));
// console.log(set);// keys values entries 
// console.log(set.keys());
// console.log(set.values());
// console.log(set.entries());
// for(let key of set.keys()){
//   console.log(key);
// }// forEach 遍歷set集合
// set.forEach((key,value)=>{
//   console.log(key,value)
// })// 返回set成員個數
// console.log(set.size,'返回成員個數');
// 判斷set集合中有沒有這個成員
// console.log(set.has(null))
// 清空set成員
// set.clear();
// console.log(set)// set應用 數組去重 
let set1 = new Set([1,2,3,4,5,4,3,2,1]);
console.log(Array.from(set1));
console.log([...set1])

map集合?

? 類似于對象,也是鍵值對形式得數據結構,鍵可以是任意數據類型,實現了迭代器接口?
? let map = new Map();//接收參數數組 鍵值對組成數組

? 1.添加鍵值對?

? map.set(funtion(){},null);
? map.set(1,1);

? 2.刪除一個屬性

? map.delete(1)

? 3.keys values entries?

? keys返回得是鍵迭代器對象
? values返回的是值迭代器對象
? entries返回得鍵值對迭代器對象

? 4.forEach

? map.forEach((value,key)=>{

? })

? 5.size?

? map.size 獲取鍵值對個數

? 6.獲取屬性?

? map.get(鍵)

/*** 對象鍵只能是string類型和symbol類型* Map類似于對象 */
// let obj = {
//   name:'zhangsan',
//   null:'hello',
//   [Symbol('email')]:'xxxx.com'
// }
let obj = {name:'zhangsan',age:12
}
// console.log(Object.entries(obj));
let map = new Map(Object.entries(obj));
// 添加成員 set
map.set({name:'map'},'hello');
let foo = function(){}
map.set(foo,null);
// console.log(map);// 刪除成員 
// map.delete('name');
// map.delete(foo);
// console.log(map);// 獲取成員鍵所對應的值
console.log(map.get('age'));
console.log(map.get(foo));console.log(map.size);//獲取成員個數 console.log(map.keys());//獲取鍵組成迭代器對象 
console.log(map.values());//獲取值組成迭代器對象
console.log(map.entries());//獲取鍵和值組成迭代器對象// 遍歷map
map.forEach((value,key)=>{console.log(value,key)
})
console.log(Map.prototype.get,Set.prototype);

對象和map區別?

1.對象鍵只能是symbol值或者字符串,map鍵可以是任意數據類型
2.map屬性是有序得,按照插入鍵得順序依次返回,對象屬性無序的,但是也保留字符串或symbol值得插入順序
3.map鍵值對個數可以通過size獲取,對象鍵值對個數只能手動計算
4.map實現了迭代器接口,可以直接使用for...of遍歷,對象沒有實現迭代器接口,無法直接for..of遍歷但是對象可以調用keys,values,entries得到數組進行遍歷
5.都是引用數據類型,都有原型對象

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213591.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213591.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213591.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

力扣labuladong一刷day36天

力扣labuladong一刷day36天 一、96. 不同的二叉搜索樹 題目鏈接&#xff1a;https://leetcode.cn/problems/unique-binary-search-trees/ 思路&#xff1a;這是一道典型的動態規劃題&#xff0c;從n3來看 子樹有幾種形態 (0, 2)、(1, 1)、(2, 0)有規律可循&#xff0c;即為左…

飛天使-linux操作的一些技巧與知識點4

文章目錄 ansible配置文件的優先級嘗試開始進行操作ansible常用模塊ansible 的playbook示例安裝phpplaybook中變量的引用 ansible yum install -y ansible 測試是否可用 ansible localhost -m ping /etc/ansible/ansible.cfg &#xff1a;主配置文件&#xff0c;配置 ansible…

大公司求我用Kotlin寫個通用爬蟲模板

bug虐我千百遍&#xff0c;我待他如初戀。每次深夜挑燈都是我與bug較量的時間。今天我要說的就是寫一個爬蟲模版&#xff0c;自動抓取百度圖片的教程&#xff0c;這次使用Kotlin編寫的爬蟲程序在Scrapy框架下完成的&#xff0c;如有不足歡迎指正。 首先&#xff0c;使用Kotlin編…

Mybatis-Plus源碼解析之@MapperScan(一)

group : com.baomidou version:3.5.2.2-SNAPSHOT baomidou官網可以從快速開始了解到&#xff0c;除了配置數據源&#xff0c;最重要的就是MapperScan 注解&#xff0c;在 Spring Boot 啟動類中添加 MapperScan 注解&#xff0c;掃描 Mapper 文件夾。 MapperScan 按照慣例&…

angular form 組件、雙向綁定;反應式表單

1.使用雙向綁定&#xff0c;以及angular的表單提交功能 app.moudle中引入 雙向綁定 [(ngModel)]"text" ??????? 效果 提交表單 2.反應式表單 在app.module.ts中引入在組件中引入&#xff0c;并放在一個變量里 在初始化時實列化這個module 定義規則 在html…

Linux:環境變量

目錄 1.基本變量 2.通過代碼獲取環境變量 2.1 main傳參 2.2 全局變量environ 2.3 系統調用getenv() 3.在腳本文件中添加環境變量 4.環境變量通常是具有全局屬性 1.基本變量 環境變量(environment variables)一般是指在操作系統中用來指定操作系統運行環境的一些參數…

商用中央空調市場分析:預計2028年將達到628億元

商用空調一直以來都沒有一個相對比較明確的概念&#xff0c;一直以來被認為是制冷空調市場的一個細分子行業。現在比較一致的觀點是&#xff0c;可以納入商用空調范疇的產品可以包括戶式中央空調產品、部分傳統中央空調產品以及部分家用空調。商用空調已普遍采用直流變頻領先技…

網絡計算機模擬實現

今天給大家說說前幾天完成的一個模擬的網絡計算機吧&#xff0c;雖然計算機的模擬實現的原理很簡單&#xff0c;但是如果要想寫乘網絡的&#xff0c;個人認為是不簡單的。基本上算是包涵了套接字編程的三分之一的知識點&#xff0c;此處的套接字編程指的是在理解TCP/IP五層協議…

泡沫玻璃市場分析:預計2028年將達到14億美元

泡沫玻璃最早是由美國匹茲堡康寧公司發明的&#xff0c;是由碎玻璃、發泡劑、改性添加劑和發泡促進劑等&#xff0c;經過細粉碎和均勻混合后&#xff0c;再經過高溫熔化&#xff0c;發泡、退火而制成的無機非金屬玻璃材料。它是由大量直徑為1~2毫米的均勻氣泡結構組成。其中吸聲…

Linux 常用命令----mktemp 命令

文章目錄 基本用法實例演示高級用法注意事項 mktemp 命令用于創建一個臨時文件或目錄&#xff0c;這在需要處理臨時數據或進行安全性測試時非常有用。使用 mktemp 可以保證文件名的唯一性&#xff0c;避免因文件名沖突而導致的問題。 基本用法 創建臨時文件: 命令 mktemp 默認…

Go語言基礎知識學習(一)

Go基本數據類型 bool bool型值可以為true或者false,例子&#xff1a; var b bool true數值型 類型表示范圍int8有符號8位整型-128 ~ 127int16有符號16位整型-32768 ~ 32767int32有符號32位整型-2147783648 ~ 2147483647int64有符號64位整型uint8無符號8位整型0 ~ 255uint16…

優思學院|如何建立公司運營指標體系?如何推行六西格瑪改進運營指標?

關鍵績效指標 (KPI) 是測量您團隊或組織朝重要商業目標進展表現如何的量化指標&#xff0c;組織會在多個層面使用 KPI&#xff0c;這視乎您想要追蹤何指標而定&#xff0c;您可以設定全組織的、特定團隊的、或甚至是個人 KPI。 良好的KPI能讓公司管理者掌握組織的營運是否進度…

使用React 18、Echarts和MUI實現溫度計

關鍵詞 React 18 Echarts和MUI 前言 在本文中&#xff0c;我們將結合使用React 18、Echarts和MUI&#xff08;Material-UI&#xff09;庫&#xff0c;展示如何實現一個交互性的溫度計。我們將使用Echarts繪制溫度計的外觀&#xff0c;并使用MUI創建一個漂亮的用戶界面。 本文…

點評項目——分布式鎖

2023.12.10 集群模式下的并發安全問題及解決 隨著現在分布式系統越來越普及&#xff0c;一個應用往往會部署在多臺機器上&#xff08;多節點&#xff09;&#xff0c;通過加鎖可以解決在單機情況下的一人一單安全問題&#xff0c;但是在集群模式下就不行了。見下圖&#xff1a…

在 Android WebView 中實現和 JavaScript 的互操作

前言 在 APP 中內嵌一個 H5 來實現特定的業務功能已經是非常成熟且常用的方案了。 雖然 H5 已經能夠實現大多數的需求&#xff0c;但是對于某些需求還是得依靠原生代碼來實現然后與 JavaScript 進行交互&#xff0c;例如我目前所負責的項目就是一個 “智能硬件” 設備&#x…

【PyTorch】卷積神經網絡

文章目錄 1. 理論介紹1.1. 從全連接層到卷積層1.1.1. 背景1.1.2. 從全連接層推導出卷積層 1.2. 卷積層1.2.1. 圖像卷積1.2.2. 填充和步幅1.2.3. 多通道 1.3. 池化層&#xff08;又稱匯聚層&#xff09;1.3.1. 背景1.3.2. 池化運算1.3.3. 填充和步幅1.3.4. 多通道 1.4. 卷積神經…

實現React18加TS,解決通用后臺管理系統,實戰方案落地有效實踐經驗

隨著前端技術的不斷發展和更新&#xff0c;使用React 18結合TypeScript&#xff08;TS&#xff09;來構建通用后臺管理系統已成為一種常見的選擇。本文將介紹如何在項目中應用React 18和TS&#xff0c;并分享一些實戰方案的有效實踐經驗。 一、搭建React 18 TS項目 首先&…

12.2每日一題(1無窮型冪指函數:二倍角公式+三部曲+等價無窮小代換(只有整體的因子不為0才能先算出來))

注意&#xff1a;求極限不能想先算哪里就先算哪里&#xff0c;只有整體的因子不為0才能先算出來&#xff0c;部分不為0不可以先算

外貿老業務也棘手的一個問題

這幾天有2個老業務都被一個類同的問題纏住了。 客戶定購了三臺車&#xff0c;由于是非常規要求所以我建議收取全款或者最少收50%的定金。但是業務員為了當月業績或者為了拿到就收了客戶20% 或者30% &#xff0c;定金收到了&#xff0c;我也不好再逼著業務員去加收定金。 訂單就…

記錄 | ubuntu上安裝fzf

在 ubuntu 上采用命令行安裝 fzf 的方式行不通 指的是采用下面的方式行不通&#xff1a; sudo apt install fzf # 行不通 sudo snap install fzf --classic # 行不通正確的安裝方式是&#xff1a; ● 到 fzf 的 git 倉庫&#xff1a;https://github.com/junegunn/fzf/re…