集合(Set)
集合是元素的集合,只能包含唯一元素
创建一个空集合
const companies = new Set()
console.log(companies)
Set(0) {}
从数组创建集合
const languages = [
'英语',
'芬兰语',
'英语',
'法语',
'西班牙语',
'英语',
'法语',
]
const setOfLanguages = new Set(languages)
console.log(setOfLanguages)
Set(4) {"英语", "芬兰语", "法语", "西班牙语"}
集合是可迭代对象,我们可以迭代每个元素。
const languages = [
'英语',
'芬兰语',
'英语',
'法语',
'西班牙语',
'英语',
'法语',
]
const setOfLanguages = new Set(languages)
for (const language of setOfLanguages) {
console.log(language)
}
英语
芬兰语
法语
西班牙语
向集合添加元素
const companies = new Set() // 创建一个空集合
console.log(companies.size) // 0
companies.add('谷歌') // 向集合添加元素
companies.add('脸书')
companies.add('亚马逊')
companies.add('甲骨文')
companies.add('微软')
console.log(companies.size) // 集合中5个元素
console.log(companies)
Set(5) {"谷歌", "脸书", "亚马逊", "甲骨文", "微软"}
我们也可以使用循环向集合添加元素。
const companies = ['谷歌', '脸书', '亚马逊', '甲骨文', '微软']
setOfCompanies = new Set()
for (const company of companies) {
setOfCompanies.add(company)
}
Set(5) {"谷歌", "脸书", "亚马逊", "甲骨文", "微软"}
从集合中删除元素
我们可以使用 delete
方法从集合中删除元素。
console.log(companies.delete('谷歌'))
console.log(companies.size) // 剩下4个元素
检查集合中是否有元素
has
方法可以帮助我们检查某个元素是否存在于集合中。
console.log(companies.has('苹果')) // false
console.log(companies.has('脸书')) // true
清空集合
这将移除集合中的所有元素。
companies.clear()
console.log(companies)
Set(0) {}
下面的例子展示了如何使用集合。
const languages = [
'英语',
'芬兰语',
'英语',
'法语',
'西班牙语',
'英语',
'法语',
]
const langSet = new Set(languages)
console.log(langSet) // Set(4) {"英语", "芬兰语", "法语", "西班牙语"}
console.log(langSet.size) // 4
const counts = []
const count = {}
for (const l of langSet) {
const filteredLang = languages.filter((lng) => lng === l)
console.log(filteredLang) // ["英语", "英语", "英语"]
counts.push({ lang: l, count: filteredLang.length })
}
console.log(counts)
[
{ lang: '英语', count: 3 },
{ lang: '芬兰语', count: 1 },
{ lang: '法语', count: 2 },
{ lang: '西班牙语', count: 1 },
]
集合的另一个用法是计算数组中的唯一项。
const numbers = [5, 3, 2, 5, 5, 9, 4, 5]
const setOfNumbers = new Set(numbers)
console.log(setOfNumbers)
Set(5) {5, 3, 2, 9, 4}
集合的并集
可以使用扩展运算符来找到两个集合的并集。让我们找出集合 A 和集合 B 的并集(A U B)。
let a = [1, 2, 3, 4, 5]
let b = [3, 4, 5, 6]
let c = [...a, ...b]
let A = new Set(a)
let B = new Set(b)
let C = new Set(c)
console.log(C)
Set(6) {1, 2, 3, 4, 5, 6}
集合的交集
可以使用 filter
方法找到两个集合的交集。让我们找出集合 A 和集合 B 的交集(A ∩ B)。
let a = [1, 2, 3, 4, 5]
let b = [3, 4, 5, 6]
let A = new Set(a)
let B = new Set(b)
let c = a.filter((num) => B.has(num))
let C = new Set(c)
console.log(C)
Set(3) {3, 4, 5}
集合的差集
可以使用 filter
方法找到两个集合之间的差集。让我们找出集合 A 和集合 B 的差集(A \ B)。
let a = [1, 2, 3, 4, 5]
let b = [3, 4, 5, 6]
let A = new Set(a)
let B = new Set(b)
let c = a.filter((num) => !B.has(num))
let C = new Set(c)
console.log(C)
Set(2) {1, 2}
映射(Map)
创建一个空映射
const map = new Map()
console.log(map)
Map(0) {}
从数组创建映射
countries = [
['芬兰', '赫尔辛基'],
['瑞典', '斯德哥尔摩'],
['挪威', '奥斯陆'],
]
const map = new Map(countries)
console.log(map)
console.log(map.size)
Map(3) {"芬兰" => "赫尔辛基", "瑞典" => "斯德哥尔摩", "挪威" => "奥斯陆"}
3
向映射添加值
const countriesMap = new Map()
console.log(countriesMap.size) // 0
countriesMap.set('芬兰', '赫尔辛基')
countriesMap.set('瑞典', '斯德哥尔摩')
countriesMap.set('挪威', '奥斯陆')
console.log(countriesMap)
console.log(countriesMap.size)
Map(3) {"芬兰" => "赫尔辛基", "瑞典" => "斯德哥尔摩", "挪威" => "奥斯陆"}
3
从映射中获取值
console.log(countriesMap.get('芬兰'))
赫尔辛基
检查映射中的键
使用 has
方法检查映射中是否存在某个键。返回 true
或 false
。
console.log(countriesMap.has('芬兰'))
true
通过循环获取映射中的所有值。
for (const country of countriesMap) {
console.log(country)
}
(2) ["芬兰", "赫尔辛基"]
(2) ["瑞典", "斯德哥尔摩"]
(2) ["挪威", "奥斯陆"]
for (const [country, city] of countriesMap) {
console.log(country, city)
}
芬兰 赫尔辛基
瑞典 斯德哥尔摩
挪威 奥斯陆