主题
集合和映射
集合 (Set)
集合是元素的集合。集合只能包含唯一的元素。 让我们看看如何在下面的部分中创建一个集合。
创建空集合
js
const companies = new Set()
console.log(companies)sh
Set(0) {}从数组创建集合
js
const languages = [
'English',
'Finnish',
'English',
'French',
'Spanish',
'English',
'French',
]
const setOfLanguages = new Set(languages)
console.log(setOfLanguages)sh
Set(4) {"English", "Finnish", "French", "Spanish"}集合是一个可迭代对象,我们可以遍历每个元素。
js
const languages = [
'English',
'Finnish',
'English',
'French',
'Spanish',
'English',
'French',
]
const setOfLanguages = new Set(languages)
for (const language of setOfLanguages) {
console.log(language)
}sh
English
Finnish
French
Spanish向集合添加元素
js
const companies = new Set() // 创建空集合
console.log(companies.size) // 0
companies.add('Google') // 向集合添加元素
companies.add('Facebook')
companies.add('Amazon')
companies.add('Oracle')
companies.add('Microsoft')
console.log(companies.size) // 集合中有5个元素
console.log(companies)sh
Set(5) {"Google", "Facebook", "Amazon", "Oracle", "Microsoft"}我们也可以使用循环向集合添加元素。
js
const companies = ['Google', 'Facebook', 'Amazon', 'Oracle', 'Microsoft']
setOfCompanies = new Set()
for (const company of companies) {
setOfCompanies.add(company)
}sh
Set(5) {"Google", "Facebook", "Amazon", "Oracle", "Microsoft"}从集合删除元素
我们可以使用 delete 方法从集合中删除元素。
js
console.log(companies.delete('Google'))
console.log(companies.size) // 集合中剩余4个元素检查集合中的元素
has 方法可以帮助我们知道集合中是否存在某个元素。
js
console.log(companies.has('Apple')) // false
console.log(companies.has('Facebook')) // true清空集合
它会从集合中移除所有元素。
js
companies.clear()
console.log(companies)sh
Set(0) {}请看下面的示例来学习如何使用集合。
js
const languages = [
'English',
'Finnish',
'English',
'French',
'Spanish',
'English',
'French',
]
const langSet = new Set(languages)
console.log(langSet) // Set(4) {"English", "Finnish", "French", "Spanish"}
console.log(langSet.size) // 4
const counts = []
const count = {}
for (const l of langSet) {
const filteredLang = languages.filter((lng) => lng === l)
console.log(filteredLang) // ["English", "English", "English"]
counts.push({ lang: l, count: filteredLang.length })
}
console.log(counts)js
[
{ lang: 'English', count: 3 },
{ lang: 'Finnish', count: 1 },
{ lang: 'French', count: 2 },
{ lang: 'Spanish', count: 1 },
]集合的其他用例。例如,计算数组中的唯一项。
js
const numbers = [5, 3, 2, 5, 5, 9, 4, 5]
const setOfNumbers = new Set(numbers)
console.log(setOfNumbers)sh
Set(5) {5, 3, 2, 9, 4}集合的并集
要找到两个集合的并集,可以使用扩展运算符。让我们找到集合 A 和集合 B 的并集 (A ∪ B)
js
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)sh
Set(6) {1, 2, 3, 4, 5,6}集合的交集
要找到两个集合的交集,可以使用 filter。让我们找到集合 A 和集合 B 的交集 (A ∩ B)
js
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)sh
Set(3) {3, 4, 5}集合的差集
要找到两个集合的差集,可以使用 filter。让我们找到集合 A 和集合 B 的差集 (A \ B)
js
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)sh
Set(2) {1, 2}映射 (Map)
创建空映射
js
const map = new Map()
console.log(map)sh
Map(0) {}从数组创建映射
js
countries = [
['Finland', 'Helsinki'],
['Sweden', 'Stockholm'],
['Norway', 'Oslo'],
]
const map = new Map(countries)
console.log(map)
console.log(map.size)sh
Map(3) {"Finland" => "Helsinki", "Sweden" => "Stockholm", "Norway" => "Oslo"}
3向映射添加值
js
const countriesMap = new Map()
console.log(countriesMap.size) // 0
countriesMap.set('Finland', 'Helsinki')
countriesMap.set('Sweden', 'Stockholm')
countriesMap.set('Norway', 'Oslo')
console.log(countriesMap)
console.log(countriesMap.size)sh
Map(3) {"Finland" => "Helsinki", "Sweden" => "Stockholm", "Norway" => "Oslo"}
3从映射获取值
js
console.log(countriesMap.get('Finland'))sh
Helsinki检查映射中的键
使用 has 方法检查映射中是否存在键。它返回 true 或 false。
js
console.log(countriesMap.has('Finland'))sh
true使用循环从映射获取所有值
js
for (const country of countriesMap) {
console.log(country)
}sh
(2) ["Finland", "Helsinki"]
(2) ["Sweden", "Stockholm"]
(2) ["Norway", "Oslo"]js
for (const [country, city] of countriesMap){
console.log(country, city)
}sh
Finland Helsinki
Sweden Stockholm
Norway Oslo🌕 你建立了一个重要的里程碑,你势不可挡。继续前进!你刚刚完成了第10天的挑战,在通往伟大的道路上又前进了10步。现在为你的大脑和肌肉做一些练习。
练习
练习:级别1
js
const a = [4, 5, 8, 9]
const b = [3, 4, 5, 7]
const countries = ['Finland', 'Sweden', 'Norway']- 创建一个空集合
- 使用循环创建一个包含0到10的集合
- 从集合中移除一个元素
- 清空集合
- 从数组创建一个包含5个字符串元素的集合
- 创建一个国家和国家字符数的映射
练习:级别2
- 找到 a 和 b 的并集
- 找到 a 和 b 的交集
- 找到 a 与 b 的差集
练习:级别3
在国家对象文件中有多少种语言。
*** 使用国家数据找到10种最常用的语言:
js
// 你的输出应该像这样
console.log(mostSpokenLanguages(countries, 10))
[
{ English: 91 },
{ French: 45 },
{ Arabic: 25 },
{ Spanish: 24 },
{ Russian: 9 },
{ Portuguese: 9 },
{ Dutch: 8 },
{ German: 7 },
{ Chinese: 5 },
{ Swahili: 4 },
{ Serbian: 4 }
]
// 你的输出应该像这样
console.log(mostSpokenLanguages(countries, 3))
[
{English:91},
{French:45},
{Arabic:25}
]🎉 恭喜!🎉