目录

🖇 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
点击查看
function unique(arr){
	return Array.from(new Set(arr))
}

console.log(unique(values))
1
2
3
4
5

关键词:Array.fromnew. 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

利用排序后的单词作为键存储字谜,遇到重复设值的 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

# 迭代键

期望使用 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

或者使用

keys = [...keys]
1
📢 上次更新: 2022/09/02, 10:18:16