Es6引进新的两种数据结构

考题:
一、Set对象是什么?
1.Set对象是一种新型的数据结构;
2.Set对象是一种存储任何类型的唯一值的,新型的数据结构;


二、Set对象增删改查的语法:
语法:
new Set()//创建一个空set对象
new Set(iterable)//创建一个有值的set对象


三、NaN是什么?
不是数值的数值类型;


NaN有什么特点?
NaN不等于NaN;//NaN====NaN//flase


四、数组转字符串的方法;
array.toString()/ array.join()


五、字符串转数组方法?
array.join()


六、字符串去重?'tomato'
new Set()


七、对象中的key语法是什么?:{x:1}
对象的属性名必须是一个字符串/或/计算属性/或/symbol;


八、计算属性?
计算属性是es6引入的一种命名对象key的方法。


大纲Set等于=数组的升级版(??大方法)对象是属性的无序集合;数组是集的有序;

  • 定义:一个是构造函数;
  • 用来实例化一个set对象;
  • 必须使用new调用;
  • set对象用来存储任何类型的唯一值。
  • 重复值Set排重复的(包含的值是唯一的
  • 语法:
new Set()//创建一个空set对象
new Set(iterable)//创建一个有值的set对象
-  参数: iterable:可迭代对象(可以使用for of遍历的)
  • 返回值:返回一个set对象;
  • 实例1:
new Set()
输出:
new Set[]
  • 实例2:创建一个Set对象
const arr = [1,2,3,4,3,2,1]
let set = new Set(arr)
console.log(set);//Set(4) [ 1, 2, 3, 4 ]
------
 const arr=[1,2,3,4]
 const s1=new Set(arr)
 console.log(arr);
 console.log(s1);
- 输出:
 Array(4) [ 1, 2, 3, 4 ]
Set(4) [ 1, 2, 3, 4 ]
  • 实例3:重复值Set排重复的(包含的值是唯一的
const arr=[1,2,3,4,3,2,1]
const s1=new Set(arr)
console.log(arr);
console.log(s1);
-输出:
 Array(7) [ 1, 2, 3, 4, 3, 2, 1 ] 
Set(4) [ 1, 2, 3, 4 ]//排重,不会有同样数字出现;
  • 实例4:set可以存储任意类型的唯一值,对象也不例外,对象存储的是地址
const obj = {x:1}
const arr = [obj,{x:2},3,4,3,4,{x:2},obj]
const sl = new Set(arr)
console.log(arr);
console.log(sl);
- 输出:Array(8) [ {…}, {…}, 3, 4, 3, 4, {…}, {…} ]
Set(5) [ {…}, {…}, 3, 4, {…} ]

一、Set.prototype.add()

  • 定义:用于set对象中添加新值;(如果值已存在不做添加)
  • 语法:
set.add(value)//value:任意类型的值;
  • 返回值:返回更新后的set对象;(支持链式调用)
  • 实例1:基本用法
  const set1=new Set()
    set1.add(1)
    set1.add('hello')
    set1.add(true)
    set1.add(undefined)
    set1.add(null)
    set1.add(NaN)
    set1.add([1,2,3])
    set1.add({x:1})
    console.log((set1));
- 输出:Set(8) [ 1, "hello", true, undefined, null, NaN, (3) […], {…} ]
  • 实例2:支持链式调用(一次性在小括号内只能添加一个
const set1=new Set()
    set1.add(1).add(2)//可以重复添加
    set1.add('hello')
    set1.add(true)
    set1.add(undefined).add(undefined)//不会重复添加即使是undefined;
    set1.add(null)
    set1.add(NaN).add(NaN)//不会重复添加即使是NaN;
    set1.add([1,2,3])
    set1.add({x:1})
    console.log((set1));

二、Set.prototype.has()

  • 定义:用于检索set对象中是否存在指定值;
  • 语法:
set.has(value)//value是你要检索的值
  • 返回值:布尔值;
  • true:存在
  • flase:不存在
  • 实例:
const set1=new Set()
    set1.add(1)
    set1.add('hello')
    set1.add(true)
    set1.add(undefined).add(undefined)
    set1.add(null)
    set1.add(NaN).add(NaN)
    set1.add([1,2,3])
    set1.add({x:1})
    console.log((set1));

    const find=set1.has(1)
    console.log((find));
- 输出:true
-----
const set1=new Set()
    set1.add(1)
    set1.add('hello')
    set1.add(true)
    set1.add(undefined).add(undefined)
    set1.add(null)
    set1.add(NaN).add(NaN)
    set1.add([1,2,3])
    set1.add({x:1})
    console.log((set1));

    const find=set1.has(100)
    console.log((find));
- 输出:false

三、Set.prototype.delete()

  • 定义:从 Set 对象中删除指定的值(如果该值在 Set 中)
  • 语法:
delete(value)
  • 返回值:布尔值
  • 成功删除返回 true,否则返回 false。
  • 实例:
     // constset = new Set()
        // set.add(1).add(2).add(3).add(4)
        // console.log(set);
        // // 删除set中2
        // set.delete(2)
        // console.log(set);
        // for (value of set) {
        //     if (value === 1) {
        //         value = 100
        //     }
        // }
        const set = new Set()
        set.add(1).add(2).add(3).add(4)
        console.log(set);
        // 删除set中的2
        set.delete(2)
        console.log(set);


如何修改Set对象的值
setAPI没有提供一种直接的修改值的方法,我们只能???


四、Set.prototype.forEach()

  • 定义:用于遍历Set对象;
    forEach() 方法对 Set 对象中的每个值按插入顺序执行一次提供的函数。
  • 语法:
set.forEach(value,key,set){}
-------
// 箭头函数
forEach(() => { /* ... */ } )
forEach((value) => { /* ... */ } )
forEach((value, key) => { /* ... */ } )
forEach((value, key, set) => { /* ... */ } )

// 回调函数
forEach(callbackFn)
forEach(callbackFn, thisArg)

// 内联回调函数
forEach(function() { /* ... */ })
forEach(function(value) { /* ... */ })
forEach(function(value, key) { /* ... */ })
forEach(function(value, key, set) { /* ... */ })
forEach(function(value, key, set) { /* ... */ }, thisArg)

- callbackFn:对set对象中的每一个值调用一次回调函数。回调三个参数:
- value:传入set的每一个值;
- key:调用 forEach() 的 Set 对象。
- thisArg:值在执行 callbackFn 时作为 this 使用。
const set = new Set(['a', 'b', 'c'])
        const set3 = new Set()
        set.forEach((value, key, set) => {
            console.log(value);
            console.log(key);
            console.log(set);
            if (value === 'b') value = 'bbb'
            set3.add(value)
        })
        console.log(set3);
----
- 实例2:修改set对象中的值
let set = new Set
set.forEach((value,key,set)=>{
// console.log(value);
// console.log(key);
// console.log(set);
if(value===1)value= "ccc"
console.log(value);
})
---
- 输出:
c
 Set(3) [ "a", "b", "c" ] 
Set(3) [ "a", "bbb", "c" ]

大纲Map构造函数

  • 定义:
  • Map()是Es6新增的内置构造函数;
  • Map()构造函数用于创建Map对象;(也被称之词典)
    -详细: 单词map:1.映射;2.地图;
  • 语法:
//必须使用new调用;直接调用回报错;
new Map()
new Map(uterable)//传入可迭代对象,传入的可迭代必须是**键值对形式(value key)**
  • 返回值·:
  • 实例1:直接构造函数调用回报错;
const map=new Map()//报错
  • 实例2:传入一个数组,也会报错;
const arr=[1,2,3]
const map=new Map(arr)
console.log(map)//报错
  • 实例3:必须传入一个键值对形式对象;
let obj = [["x","y"],["1","2"],["x","y"]]
const map =new Map(obj)
- 输出:console.log(map);//Map { x → "y", 1 → "2"}

Map对象是什么?Map是object的,键值对(名称、值)的有序集合;

  • 定义:
  • Map对象是Es6引入的一种新型数据结构;
  • 和es6中的object一样,也使用键值对形式存储数据;
  • 和object不一样:1.有序存储;2.map对象可以是任意数据类型;
    iterable:
    1.可迭代对象;:2.可迭代对象必须是键值对形式
  • 语法:
new Map()
new Map(iterable)
iterable:可迭代对象。注意:传入的可迭代的对象必须是键值对;
new Map([1,2,3])//报错
new Map([1,'a'],[2,'b'],[3,'c'])//ok
new Map({x:1})//报错:对象不可迭代;
new Map('hello')//报错
new Map(
[0,'a'],
['hello,'b'],
[ture,'c'],
[undefined,'d'],
[null,'e'],
[{x:1},'f'],
[,'a'],
[{x:1},'f'],

)

map增删改查(11个方法)


一、增 Map.prototype.set()

set() 方法为 Map 对象添加或修改一个键(key)和值(value)的(新)键值对。
  • 语法:
map.set(key, value)

返回值:返回更新后的map对象
示例,添加一个新的键值对:

  let a = 1+1
    function fn(){}
    let obj = [[0,"a"],[a,"b"],[1,"c"],[fn(),"d"],[undefined,"e"],[NaN,"e"],["c","g"]]
    const map =new Map(obj)
    map.set("黄永福","投影仪")
    console.log(map);//Map(7) { 0 → "a", 2 → "b", 1 → "c", undefined → "e", NaN → "e", c → "g", "黄永福" → "投影仪" }

示例,修改键值对:
  let a = 1+1
    function fn(){}
    let obj = [[0,"a"],[a,"b"],[1,"c"],[fn(),"d"],[undefined,"e"],[NaN,"e"],["c","g"]]
    const map =new Map(obj)
    map.set("黄永福","投影仪")
    console.log(map);//Map(7) { 0 → "a", 2 → "b", 1 → "c", undefined → "e", NaN → "e", c → "g", "黄永福" → "投影仪" }
 map.set("黄永福","记录委员")
    console.log(map.get("黄永福"));//记录委员

二、删Map.prototype.clear()

  • 定义:
    clear() 方法会移除 Map 对象中的所有键值对。
语法:
map.clear()
  • 返回值:
    无参数
    返回undefined

二、删 Map.prototype.delete()

  • 定义:用于删除指定的键;
  • 语法:
delete(key)
  • 返回值:
  • 实例:
 // 定义:
        const obj = { x: 1 }
        const arr = [1, 2, 3]
        const fn = function () { }
        const map = new Map([
            [0, 'a'],
            ['hello', 'b'],
            [true, 'c'],
            [undefined, 'd'],
            [null, 'e'],
            [obj, 'f'],  //[{ x: 1 }, 'f'],//const obj={x:1}  
            [arr, 'g'], //[[1, 2, 3], 'g'],//const arr=[1,2,3]  
            [fn, 'h'] //[function () { }, 'h']//=>const fn=function(){}  
        ])
        console.log(map.set('黄永福', '黄永福,投影仪管理员'));//添加
        console.log(map.get('黄永福'));
        console.log(map.set('黄永福'['纪律原委','饮水机管理员']));//替换
        console.log(map.has('陈有红'));//
        console.log(map.delete('黄永福'));//删除
        console.log(map);

        console.log(map.get(0, 'a'));
        console.log(map.get('hello', 'b'));
        console.log(map.get(true, 'c'));
        console.log(map.get(undefined, 'd'));
        console.log(map.get(null, 'e'));
        console.log(map.get(obj, 'f'));
        console.log(map.get(arr, 'g'));
        console.log(map.get(fn, 'h'));

三、改 Map.prototype.has()

  • 定义:用于检索Map对象中是否具有指定的key;
  • 语法:
Map.has(key)
  • 返回值:布尔值;
  • true:检测到;
  • flase:莫有检测到;
  • 实例:
 // 定义:
        const obj = { x: 1 }
        const arr = [1, 2, 3]
        const fn = function () { }
        const map = new Map([
            [0, 'a'],
            ['hello', 'b'],
            [true, 'c'],
            [undefined, 'd'],
            [null, 'e'],
            [obj, 'f'],  //[{ x: 1 }, 'f'],//const obj={x:1}  
            [arr, 'g'], //[[1, 2, 3], 'g'],//const arr=[1,2,3]  
            [fn, 'h'] //[function () { }, 'h']//=>const fn=function(){}  
        ])
        console.log(map.set('黄永福', '黄永福,投影仪管理员'));//添加
        console.log(map.get('黄永福'));
        console.log(map.set('黄永福'['纪律原委','饮水机管理员']));//替换
        console.log(map.has('陈有红'));//检索Map对象中是否具有指定的key;
        console.log(map.delete('黄永福'));//删除
        console.log(map);
        console.log(map.get(0, 'a'));
        console.log(map.get('hello', 'b'));
        console.log(map.get(true, 'c'));
        console.log(map.get(undefined, 'd'));
        console.log(map.get(null, 'e'));
        console.log(map.get(obj, 'f'));
        console.log(map.get(arr, 'g'));
        console.log(map.get(fn, 'h'));

四、查 Map.prototype.get()

  • 定义:get()方法用于查询指定key的value
  • 语法:
map.get(key)
  • 返回值:value查到了
    undefied:没有找到
  • 示例:
    let obj = [[null,"y"],[["a"+"b"],"2"],[1,"y"],[function(){},true],[undefined,"c"],[NaN,1]]
        const map =new Map(obj)
        console.log(map.get(null));//y

四、查 Map.prototype.has()

has() 方法返回一个布尔值,查询指定键的元素是否存在。

返回值:true存在 false不存在

五、Map.prototype.forEach()

  • 定义:用于定义遍历Map对象;
  • 语法:
//记住这个!! 回调函数
forEach(callbackFn)
forEach(callbackFn, thisArg)

// 箭头函数
forEach(() => { /* … */ } )
forEach((value) => { /* … */ } )
forEach((value, key) => { /* … */ } )
forEach((value, key, map) => { /* … */ } )

// 内联回调函数
forEach(function() { /* … */ })
forEach(function(value) { /* … */ })
forEach(function(value, key) { /* … */ })
forEach(function(value, key, map) { /* … */ })
forEach(function(value, key, map) { /* … */ }, thisArg)
  • 返回值:没有返回值;undefined

  • 实例:

 const boy1 = { name: '陈有红' }
        const girl1 = { name: '王立' }
        const boy2 = { name: '田亮' }

        const map = new Map([
            [boy1, '纪律原委'],
            [girl1, '门窗原委'],
            [boy2, '插座原委'],
        ])
        map.forEach((value, key, name) => {
            console.log(value);
            console.log(key);//boy1=>object
            console.log(map);

        })

六、Map.prototype.keys()

  • 定义:keys() 返回一个引用迭代器,它包含按照顺序插入 Map 对象中每个元素的 key 值。

  • 语法:

map.keys()

注意:单独提取键值对需要配合next().value

  • 返回值:一个新的可迭代的 Map 迭代器对象。
  • 示例1拿到keys:
 const bod1 = {name:"cyh"}
        const girl2 = {name:"wl"}
        const bod2 = {name:"tl"}
        const map = new Map([
            [bod1,"记录"],
            [girl2,'蒙城'],
            [bod2,"插座"]
        ])
        const maps = map.keys()
        console.log(maps.next().value);//Object { name: "cyh" }

七、Map.prototype.values()

  • 定义:方法返回一个新的迭代器对象
  • 语法:
values()

  • 返回值:一个新的 Map 可迭代对象。

  • 实例:

 /const bod1 = {name:"cyh"}
        const girl2 = {name:"wl"}
        const bod2 = {name:"tl"}
        const map = new Map([
            [bod1,"记录"],
            [girl2,'蒙城'],
            [bod2,"插座"]
        ])
        const values = map.values()
        console.log(values.next().value);//记录


八、Map.prototype.entries()

  • 定义:
    返回一个新的迭代器map对象,其中包含 Map 对象中按插入顺序排列的每个元素的 [key, value] 对。
    语法:
map.entries()

返回值:返回一个可迭代map对象
注意:单独提取键值对需要配合next().value
示例:

           const bod1 = {name:"cyh"}
        const girl2 = {name:"wl"}
        const bod2 = {name:"tl"}
        const map = new Map([
            [bod1,""],
            [girl2,'小城夏天'],
            [bod2,"宝座"]
        ])
        const maps = map.entries()
        console.log(maps.next().value);//Array [ {name:cyh}}, "记录" ]

九、map.prototype.size

只读属性
返回map对象中有多少属性
语法:
map.size

返回值:数值,返回map对象中有多少属性
示例:
const bod1 = {name:"cyh"}
const girl2 = {name:"wl"}
const bod2 = {name:"tl"}
const map = new Map([
[bod1,"记录"],
[girl2,'蒙城'],
[bod2,"插座"]
])
console.log(map.size);//3

------------
#Map和Object的区别?
1.map有长度,Object没有;
2.map可迭代,Object不可以迭代;
**key:**
- 3. map的key可以是任意类型;
- 4. Object的可以只能是字符串,计算属性、Symbol;
----
#Object对象是键值对的无序集合;
Map:键值对(名称、值)的有序集合;
------
#计算属性
- 定义:对象的属性名必须是一个字符串或计算属性或symbol;
##es6计算属性
es6命名对象key的方法。
用方括号设置对象的属性名
对象的属性名是一个表达式
- 实例:

const obj = {
[a+b]:x
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容