🖇 JavaScript 映射与集合应用实例
# Set
# 过滤数组唯一的元素
定义
arr
为一个数组。创建一个函数unique(arr)
,该函数返回一个由arr
中 所有唯一元素所组成的数组。
let values = ["Hare", "Krishna", "Hare", "Krishna",
"Krishna", "Krishna", "Hare", "Hare", ":-O"
];
function unique(arr) {
/* 你的代码 */
}
console.log(unique(values))
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
点击查看
function unique(arr){
return Array.from(new Set(arr))
}
console.log(unique(values))
1
2
3
4
5
2
3
4
5
关键词:Array.from
| new. Set()
# Map
# 过滤重复字谜
Anagrams (opens new window) 是具有相同数量相同字母但是顺序不同的单词。
nap - pan ear - are - era cheaters - hectares - teachers
1
2
3写一个函数
aclean(arr)
,它返回被清除了字谜(anagrams)的数组。
let arr = ["nap", "teachers", "cheaters", "PAN", "ear", "era", "hectares"];
1
点击查看
方法一:使用 Map
function aclean(arr) {
let map = new Map()
for (let word of arr) {
let sorted = word.toLowerCase().split('').sort().join('')
map.set(sorted, word)
}
return Array.from(map.values())
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
利用排序后的单词作为键存储字谜,遇到重复设值的 map 会覆盖上一次的设值。因此,每个字母形式只有一个单词(并且是原来数组靠后的形式)。
方法二:普通对象,因为键就是字符串。:
function aclean(arr) {
let obj = {};
for (let i = 0; i < arr.length; i++) {
let sorted = arr[i].toLowerCase().split("").sort().join("");
obj[sorted] = arr[i];
}
return Object.values(obj);
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 迭代键
期望使用
map.keys()
得到一个数组,然后使用例如.push
等特定的方法对其进行处理。let map = new Map(); map.set("name", "John"); let keys = map.keys(); keys.push("more");
1
2
3
4
点击查看
因为 map.keys()
返回的是一个可迭代对象而非数组。需要使用 Array.from()
转换为数组。
let map = new Map();
map.set("name", "John");
let keys = Array.from(map.keys());
keys.push("more");
1
2
3
4
2
3
4
或者使用 …
:
keys = [...keys]
1
编辑 (opens new window)
📢 上次更新: 2022/09/02, 10:18:16