在力扣遇到一到题,是罗马数字计算其中实现的过程中有一部分需要字符串到数字的映射。我的第一想法是通过switch进行实现
switch(item){
case 'I' :
value = 1
break;
case 'V' :
value = 5
break
case 'X' :
value = 10;
break;
case 'L' :
value = 50;
break;
case 'C' :
value = 100;
break;
case 'D' :
value = 500;
break;
case 'M' :
value = 1000
break;
}
虽然也实现了,但是后来看到题解的时候就觉得很憨。这不就是映射嘛,完全没想到,所以在这里整理一下。
Map对象自带方法
- clear 从映射中移除所有元素
- delete 从映射中移除指定元素
- forEach 对映射中的每个元素执行指定操作
- get 返回映射中指定的元素
- has 如果映射包含指定元素,则返回true
- set 添加一个新建元素到映射
- toString 返回映射字符串形式
- valueOf 返回指定对象的原始值
使用方法
var m = new Map([1,'red'])
m.set(2,'balck')
m.set(3,()=>{console.log('我是3')}
m.set('键1',{value:'值1'})
console.log(m.get(1)//red
console.log(m.size)//4
console.loh(m.has('键1'))// true
优化
//1.
const symbolValues = new Map();
symbolValues.set('I', 1);
symbolValues.set('V', 5);
symbolValues.set('X', 10);
symbolValues.set('L', 50);
symbolValues.set('C', 100);
symbolValues.set('D', 500);
symbolValues.set('M', 1000);
//2.使用字面量
let symbolValues = {
"I":1,
"v":2
}
ts中的枚举
//Up的值为 0, Down的值为 1等等。从0开始自增长
enum Direction {
Up,
Down,
Left,
Right
}
//当然你也可以指定值
enum Direction {
Up = 1,
Down,
Left,
Right
}
//或许使用字符串枚举
enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT",
}
console.log(Up)//"Up"
//异构
enum Direction {
Up = "UP",
Down = 2
}