JS Set、Map数据结构

JS Set、Map数据结构

1. Set

类似于数组 Array,Set 中的值都是唯一的,因此常用于去重
内置迭代器,可以遍历,可以转换成数组

let arr = [1,2,3,4,3,2]
let s1 = new Set(arr)
console.log(s1)  // Set(4) {1, 2, 3, 4}
console.log([...s1])  // [1, 2, 3, 4]
console.log(Array.from(s1))  // [1, 2, 3, 4]

在这里插入图片描述

// 属性与方法

// 1. add() 方法: 往 Set 中加入一个值
let s2 = new Set()
s2.add(1)
s2.add(2)
s2.add(3)
s2.add(4).add(5).add(6)
console.log(s2)  // Set(6) {1, 2, 3, 4, 5, 6}

// 2. clear()方法: 清空 Set
s2.clear()
console.log(s2)  // Set(0) {}

// 3. delete()方法: 删除 Set 中某个值
s2.delete(4)
console.log(s2)  // Set(5) {1, 2, 3, 5, 6}

// 4. has()方法: 判断 Set 中是否包含某个值,返回 true 或 false
console.log(s2.has(4))  // true
console.log(s2.has(8))  // false

// 5. keys()方法: 返回键名的遍历器,Set 中键名就是键值
//	  values()方法: 返回键值的遍历器
//    entries()方法: 返回键值对的遍历器
//    foreach()方法: 遍历每个成员
for(let i of s2.keys()) {
    console.log(i)  // 1,2,3,4,5,6
}

for(let i of s2.values()) {
    console.log(i)  // 1,2,3,4,5,6
}

for(let i of s2.entries()) {
    console.log(i)  // [1,1] [2,2] [3,3] [4,4] [5,5] [6,6]
}

s2.forEach(item => console.log(item))  // 1,2,3,4,5,6

利用 Set 结构对复杂数组去重:

let arr = [1,2,2,"test1","test1",[1,2],[1,2],{name: "testName"},{name: "testName"},{age: "22"}]

let s1 = new Set()

let resArr = arr.filter((item) => {
    let n = JSON.stringify(item)
    if (s1.has(n)) {
        return false
    } else {
        s1.add(n)
        return true
    }
})
console.log(resArr)
// [1,2,"test1",[1,2],{name: "testName"},{age: "22"}]

2. Map

类似于对象 Object,但是 Map 中的键名不限于字符串,甚至可以是一个 object

内置迭代器,可以遍历,可以转换成数组

let m1 = new Map([["name", "testName"], ["age", 10], [{a:1}, "gsa"]])
console.log(m1) // Map(3) {"name" => "testName", "age" => 10, {…} => "gsa"}
console.log([...m1])  // [["name", "testName"], ["age", 10], [{…}, "gsa"]]
console.log(Array.from(m1))  // [["name", "testName"], ["age", 10], [{…}, "gsa"]]

在这里插入图片描述

// 属性与方法

// 1. set(key, value)方法: 往 Map 中添加一个键值对,第一个参数为键值,第二个参数为键值
let m2 = new Map()
m2.set("name", "test")
m2.set("age", 22)
m2.set({a:1}, "gsa")
console.log(m2) // Map(3) {"name" => "testName", "age" => 22, {…} => "gsa"}

// 2. get(key)方法: 获取键值
console.log(m2.get("name"))  // test

// 3. has(key)方法: 判断键是否存在
console.log(m2.has("name"))  // true

// 4. delete(key)方法: 删除指定键
m2.delete("name")
console.log(m2)  // Map(2) {"age" => 22, {…} => "gsa"}

// 5. clear()方法: 清空 Map
m2.clear()
console.log(m2)  // Map(0) {}

// 6. keys()方法: 返回键名的遍历器
//	  values()方法: 返回键值的遍历器
//    entries()方法: 返回键值对的遍历器
//    foreach()方法: 遍历每个成员
for(let i of s2.keys()) {
    console.log(i)  // name, age, {a: 1}
}

for(let i of s2.values()) {
    console.log(i)  // test, 222, gsa
}

for(let i of s2.entries()) {
    console.log(i)  // ["name", "test"],["age", 22],[{…}, "gsa"]
}

s2.forEach(item => console.log(item))  // test, 222, gsa
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值