在map中key只能是字符串吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在map中key只能是字符串吗相关的知识,希望对你有一定的参考价值。

javascript中,Map中的key可以是任意类型的值,包括字符串、数字、布尔值、对象、数组等。在使用Map时,可以将任何类型的值作为key来使用。
例如,以下代码将一个对象作为key,并将其与一个值关联起来:

plaintext
Copy code
const myMap = new Map();
const objKey = key: 'value' ;
myMap.set(objKey, 'hello');
console.log(myMap.get(objKey)); // 输出 "hello"

需要注意的是,虽然Map中的key可以是任意类型的值,但是在比较key时,会使用"SameValueZero"算法进行比较,该算法将NaN视为与自身相等,但将NaN视为与其他任何值都不相等。因此,在使用Map时需要注意key的比较方式,以避免出现意外的结果。
参考技术A 不仅可以是字符串,还可以是任何可哈希的值(hashable value),例如数字、元组等。由于键必须是唯一的,因此将使用键来查找值,因此必须是可哈希的。此外,字典中的键也不能变化,因为字典是可变的,因此可哈希的值更容易满足这些要求。 参考技术B 在 JavaScript 中,Map 中的键可以是任何类型的值,包括字符串、数字、布尔值、对象等。但是需要注意的是,Map 中的键是基于“SameValueZero”算法进行比较的,这意味着两个键只有在它们的值完全相等时才被视为相等,因此在使用对象作为键时需要特别小心,确保对象的值唯一且不变。

es6笔记Map数据结构

概要

字典是用来存储不重复key的Hash结构。不同于集合(Set)的一点,字典使用的是[key,value]的形式来存储数据。

JavaScript的对象(Object:{})只能用字符串当做key。使用起来有一定限制。
为了解决这个问题,ES6提供的Map数据结构。它类似与对象,也是[key,value]的集合,但是key的范围不限于字符串,各种类型的值(包括对象)都可以当做key。


也就是说Object结构提供了 “字符串--值”的对应;
Map提供了“值--值”的对应,是一种完善的Hash结构的实现。
如果需要使用键值对的数据结构,Map比Object更合适。

//对于Object只能使用字符串作为key这一点,例如一下代码。

var obj = {},
    key1={b:22},
    key2={c:33};

obj[key1] = 1;
obj[key2] = 2;

//此时key1,key2都会被转成字符串“[object Object]”
console.log(obj);  //Object{[object Object] : 2} 

使用

1 创建一个Map

const map = new Map([
    ['a',1],['b',2]
]);

console.log(map); // {"a" => 1, "b" => 2}

2 Map 类的属性

console.log(map.size); //字典长度

3 Map 类的方法

set(key,value)

设置一个键值对,然后返回整个Map结构。如果Key已经有值,则键值被更新,否则生成该键。
map里面的key的排序顺序是按照添加的顺序排列的。

map.set('jd','www.jd.com')
   .set('baidu','www.baidu.com');

console.log(map);

get(key)

读取key对应的键值,如果找不到key,返回undefined。

console.log(map.get('jd'));  //wwww.jd.com
console.log(map.get('x'));   //undefined

delete(key)

删除某个键,成功返回true,失败返回false。

console.log(map.delete('baidu')); // true
console.log(map.delete('baidu')); // false

has(key)

判断某个key是否在map中存在,返回一个布尔值。

console.log(map.has('jd')) //true

clear()

清除所有数据,无返回值

map.clear();
console.log(map);  // Map(0) {}

keys()

返回键名的遍历器

const map = new Map([
    ['jd','www.jd.com'],
    ['baidu','www.baidu.com']
]);
console.log(map.keys());   // MapIterator {"baidu","jd"}

values()

返回键值的遍历器

console.log(map.values());   // MapIterator {"www.baidu.com","www.jd.com"}

entries

返回键值对的遍历器

console.log(map.entries());   // MapIterator {['jd','www.jd.com'],['baidu','www.baidu.com']}

forEach()

使用回调函数遍历每个成员

map.forEach(function(key,value,map){
    console.log(key + ':' + value); // baidu:www.baidu.com
})

以上是关于在map中key只能是字符串吗的主要内容,如果未能解决你的问题,请参考以下文章

hibernate map 映射,key和value只能是一对一吗,一个key对应多个value怎么办?

如何存储多个数据类型的数组

java用map通过value能找到key吗

es6笔记Map数据结构

PHP中如何给关联数组的key和value转码?

ES6 Map