ES6-15 map与set

Promise、Proxy、Map、Set这些ES6新增的api无法用babel实现语法降级,需要使用到polyfill

Set

  • 成员是唯一的,不能重复
  • 有iterator接口,可迭代
  • 具有iterator接口的所有类型,都能作为new Set()的参数,如类数组、数组
    在这里插入图片描述
const myS = new Set()
console.log(myS)
myS.add(1) // 只能传1个参数
console.log(myS)
myS.add(1) // 添加重复的则无效果,成员是唯一的
console.log(myS)
console.log(new Set([1])) // 初始化传入数组

在这里插入图片描述

  • 对引用值的判断依然是地址是否相同
console.log(new Set([NaN,NaN])) // 只会添加一个NaN
const obj = {}
const o2 = obj
console.log(new Set([{}, {}])) // 不同 添加2个
console.log(new Set([obj, o2])) // 引用相同 添加1个

原型属性及方法

size属性返回长度

add方法返回set实例,链式调用

const myS = new Set()
myS.add(1).add(2)
console.log(myS)

在这里插入图片描述

delete方法 返回值是删除与否

const myS = new Set([1, 2, 3])
console.log(myS.delete(1)) // true
console.log(myS, myS.size) // Set(2) {2, 3} 2
console.log(myS.delete(1)) // false

clear方法

const myS = new Set([1, 2, 3])
console.log(myS.clear()) // undefined
console.log(myS) // Set(0) {}

has方法 判断是否有该值

const myS = new Set([1, {}, 3])
console.log(myS.has(1)) // true
console.log(myS.has(4)) // false
console.log(myS.has({})) // false 

set和obj不一样,他的操作是实时的,即使在操作前打印,看到的也是全部操作执行完的结果

遍历方法 keys/values/entries

  • 由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys方法和values方法的行为完全一致。
const myS = new Set([1, 2, 3])
console.log(myS.keys()) // 键名的迭代器
console.log(myS.values()) // 键值的迭代器
console.log(myS.entries()) // 键值对的迭代器
for(let i of myS.keys()){console.log(i)
}
for(let i of myS.values()){console.log(i)
}
for(let i of myS.entries()){console.log(i)
}

在这里插入图片描述

  • set实例本身也能遍历
const myS = new Set([1, 2, 3])
for(let i of myS){console.log(i) // 1 2 3
}
console.log(Set.prototype[Symbol.iterator] === Set.prototype.values) // true
console.log(Set.prototype[Symbol.iterator] === Set.prototype.keys) // true

forEach方法

const myS = new Set([1, 2, 3])
myS.forEach((val, key, set) => {console.log(val, key, set)
})

在这里插入图片描述

set转数组/数组去重

  • 用…展开,再放入数组
const myS = new Set([1, 2, 3])
console.log([...myS]) // [1, 2, 3]
console.log([...new Set([2, 2, 3, 4, 5])]) // [2, 3, 4, 5]

和数组map方法结合使用

const myS = new Set([1, 2, 3])
const myS2 = new Set([...myS].map(item => item * 2))
console.log(myS2) // Set(3) {2, 4, 6}
const arr = [1, 0, 1, 2]
console.log(new Set([...arr].map(parseInt))) // Set(3) {1, NaN, 2}

和Array.from结合

let set = new Set([1, 2, 3]);
set = new Set(Array.from(set, val => val * 2));
// set的值是2, 4, 6

实现∩ ∪ 差集 filter has结合使用

let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);// 并集
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4}// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}// (a 相对于 b 的)差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}

map

  • 键可以是对象
    在这里插入图片描述
const m = {}
const x = {id:1}
const y = {id:2}
m[x] = "foo"
m[y] = "bar"
console.log(m[x]) // bar
console.log(m[y]) // bar

Map原型方法、属性

set方法设置

  • set方法设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。
const m = new Map()
const x = { id: 1 }
const y = { id: 2 }
m.set(x, 'foo').set(y, 'bar')
console.log(m)
console.log(m.get(x)) // foo
console.log(m.get(y)) // bar

在这里插入图片描述

  • 作为构造函数,Map 可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。
  • 键名相同时会覆盖
const map = new Map([['name', '张三'],['title', 'Author']
]);map.size // 2
map.has('name') // true
map.get('name') // "张三"
map.has('title') // true
map.get('title') // "Author"
let items = [['name', 'Lee'], ['title', 'Teacher']]
let map = new Map()
items.forEach(([key, value]) => {map.set(key, value)
})
console.log(map)
let map = new Map()
map.set(-0, 1)
console.log(map.get(+0)) // 1
map.set(NaN, 2)
console.log(map.get(NaN)) // 2

delete方法

  • 删除某个键,返回true。如果删除失败,返回false。
const m = new Map();
m.set(undefined, 'nah');
console.log(m.delete(undefined)) // true
console.log(m.delete(1)) // false    

clear

  • clear方法清除所有成员,没有返回值。

has

  • has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。

遍历方法

Map 结构原生提供三个遍历器生成函数和一个遍历方法。
Map.prototype.keys():返回键名的遍历器
Map.prototype.values():返回键值的遍历器
Map.prototype.entries():返回所有成员的遍历器
Map.prototype.forEach():遍历 Map 的所有成员。

const map = new Map([['F', 'no'],['T', 'yes'],
]);for (let item of map.entries()) {console.log(item);
}
// ["F", "no"]
// ["T", "yes"]
// 或者
for (let item of map) {console.log(item);
}
// ["F", "no"]
// ["T", "yes"]
console.log(map[Symbol.iterator] === map.entries) // true// 解构
for (let [key, value] of map.entries()) {console.log(key, value);
}

Map转为数组

  • …可以将部署了迭代器接口的结构转换为数组
const map = new Map([['F', 'no'],['T', 'yes'],
]);
console.log([...map]);

Map转为对象

  • 条件,键名为字符串
let map = new Map()
map.set(true, 7).set('foo', ['abc'])
let obj = {}
for (let [key, value] of map) {obj[key] = value
}
console.log(obj)

在这里插入图片描述

对象转为map

const obj = {foo: [1, 2],bar: 1
}
let map = new Map()
for (let k in obj) {map.set(k, obj[k])
}
console.log(map)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jquery --- DOM操作、表单元素的初始化

1.获取ul里第2个li节点: var $li_two $("ul li:eq(1)"); // 获取该节点的内容 var $li_two_txt $li_two.text();2.获取p元素节点的title属性: var $para $("p"); var p_title $para.attr("title");3.创建2个li节点,并添加道ul中: var $li…

Jquery中post与get之间的区别详细介绍

1:GET访问浏览器认为是等幂的 GET访问浏览器认为是等幂的,就是一个相同的URL只有一个结果,相同是指整个URL字符串完全匹配。所以,第二次访问的时候,如果URL字符串没变化 浏览器是直接拿出了第一次访问的结果; POST则认…

LeetCode 424. Longest Repeating Character Replacement

原题链接在这里:https://leetcode.com/problems/longest-repeating-character-replacement/description/ 题目: Given a string that consists of only uppercase English letters, you can replace any letter in the string with another letter at mo…

ES6-16 WeakMap与WeakSet、proxy与reflect

WeakMap/WeakSet 原型上不存在遍历方法(没有部署iterator接口)成员只能是对象垃圾回收机制不考虑对成员对象的应用 WeakSet/WeakMap 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象…

jquery--- 属性和样式的操作 设置和获取HTML、文本和值、焦点事件

1.获取p元素的title属性: var title $("p").attr("title");2.给p元素加title属性(值为:栗子)和date属性(值为:2019/7/15): $("p").attr("title":"栗子", "date":"2019/7/15");3.删除p中的title属性:…

day9

前方高能---初识函数 一. 什么是函数 函数:对代码块和功能的封装和定义. 二. 函数的定义,函数名,函数体,以及函数的调用 def 函数名(): 函数体 函数体:就是函数被执行之后要执行的代码. 三, 函数的返回 执行完函数之后,我们可以使用return来返回结果. 函数中return的使用: 1.函…

MySQL 数据库索引

数据库索引在数据库中、索引使数据库程序无须对整个表进行全表扫描就可以在其中找到所需的数据;数据库中的索引是某个表中一列或者若干列值的集合、以及物理标识这些值的数据页的逻辑指针清单;MySQL 索引的增删查SQL 语句效率的分析索引的作用&#xff1…

ES6-17 class与对象

class 模拟类的方式语法糖(把以前的写法换了一个方式) 类内部的方法是不可枚举的 ES5用Object.assign拓展的原型属性是可枚举的 function Point(x, y) {this.x x;this.y y; } // 这样定义的原型上方法eat\drink是可枚举的 Point.prototype Object…

8.8 正睿暑期集训营 Day5

目录 2018.8.8 正睿暑期集训营 Day5总结A 友谊巨轮(线段树 动态开点)B 璀璨光滑C 构解巨树考试代码ABC2018.8.8 正睿暑期集训营 Day5时间:3.5h(实际)期望得分:602020实际得分:202020 比赛链接这里也有一些 总结 线段树!&#xff0…

算法 --- 二叉树的最大深度

思路: 1.二叉树的深度,等于Max(左子树最大深度,右子树最大深度) 1 2.节点不存在时,此时的深度为0 3.当节点存在,左右子树不存在时(此时为叶子节点) 返回1 /*** Definition for a binary tree node.* function TreeNode(val) {* this.val val;* this.left this.righ…

ES6-18/19 异步的开端-promise

ES6-18异步的开端-promise ES6-19 promise的使用方法和自定义promisify try catch只能捕获同步异常,不能捕获异步的 等待所有异步都执行完,打印结果,比较笨拙的方法,在每个异步操作加arr.length 3 && show(arr) Promis…

leetcode35 C++ 4ms 搜索插入位置

class Solution { public:int searchInsert(vector<int>& nums, int target) {for(int i 0;i<nums.size();i){if(nums[i] > target){return i;}}return nums.size()-1;} }; 转载于:https://www.cnblogs.com/theodoric008/p/9449049.html

OpenCV-Python 中文教程(搬运)目录

OpenCV-Python 中文教程 OpenCV官方教程中文版&#xff08;For Python&#xff09; OpenCV2-Python-Tutorials 段力辉 译 说明&#xff1a;搬运自linux公社pdf文件&#xff0c;粗略搬运&#xff0c;仅作个人笔记参考&#xff0c;有时间再美化 部分文件参考&#xff1a; https:/…

算法 --- 平衡二叉树

解题思路: 1.首先写一个返回深度的函数d 2.写一个遍历函数t 3.在t中首先判断,r是否为空(为空则此时就是平衡二叉树,返回true),然后判断是否为叶子节点(r.left null && r.right null)若是则返回true,最后判断,其左子树的深度与右子树的深度之差是否大于1.若是则返回fal…

【co】ES6-20/21 iterator与generator

ES6-20 iterator与generator ES6-21 async与await、ES6的模块化 try catch不能捕获异步异常 try catch是同步代码 try {setTimeout(() > {console.log(a)}) } catch (e) {console.log(e) }iterator 内部迭代器&#xff1a;系统定义好的迭代器接口&#xff08;如数组Symbol…

嵌入式系统UBOOT

一个完整的嵌入式linux系统包含4部分内容&#xff1a;Bootloader、Parameters、Kernel、Root File System。3、4、5、6部分详细介绍了这4部分的内容&#xff0c;这是Linux底层软件开发人员应该掌握的。通过学习这些章节&#xff0c;您可以详细了解到如何在一个裸板上裁减、移植…

驱动芯片

一 LED驱动芯片&#xff1a; 1.1 TM1640:16位数码管驱动芯片&#xff0c;2线制控制&#xff08;CLK/DIN&#xff09;,SCLK低电平时DIN输入&#xff0c;而SCLK高电平时保持DIN保持不变&#xff1b;开始传输&#xff1a;SCLKH时DIN由高变低&#xff0c;停止传输SCLKH时DIN由由低变…

jquery --- 控制元素的隐藏/显示

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> </head> <body> <div id"panel"><h5 class"head">什么是jquery?</h5><div class"content" style"display:non…

confusion_matrix(混淆矩阵)

作者&#xff1a;十岁的小男孩 凡心所向&#xff0c;素履可往 目录 监督学习—混淆矩阵 是什么&#xff1f;有什么用&#xff1f;怎么用&#xff1f; 非监督学习—匹配矩阵 混淆矩阵 矩阵每一列代表预测值&#xff0c;每一行代表的是实际的类别。这个名字来源于它可以非常容…

Python 21 Django 实用小案例1

实用案例 验证码与验证 KindEditor 组合搜索的实现 单例模式 beautifulsoup4 验证码与验证 需要安装Pillow模块 pip stall pillow1、首先需要借助pillow模块用来画一个验证码图形&#xff0c;这里单独封装了一个py文件&#xff0c;调用一个方法就好了 1 #!/user/bin/env python…