首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js读取map+key值

在JavaScript中,Map 是一种内置的数据结构,它允许你存储键值对,并且能够记住键的原始插入顺序。Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象和原始值)都可以作为一个键或一个值。

基础概念

  • Map: 是一种键值对的集合,其中键可以是任意类型。
  • Key: 是用于检索值的唯一标识符。
  • Value: 是与键关联的数据。

优势

  1. 键的类型多样性: 与普通对象不同,Map 的键可以是任何类型,包括函数、对象和基本类型。
  2. 键值对的顺序: Map 中的元素会按照它们被插入的顺序进行迭代。
  3. 性能: 在频繁增删键值对的场景下,Map 的性能通常优于普通对象。
  4. 直接获取大小: 可以通过 Map.size 属性直接获取键值对的数量。

类型

Map 是 ECMAScript 2015 引入的新数据结构。

应用场景

  • 当需要存储和检索键值对时。
  • 当键不是字符串时。
  • 当需要保持插入顺序时。
  • 当需要快速查找、添加或删除键值对时。

示例代码

代码语言:txt
复制
// 创建一个新的 Map 实例
let myMap = new Map();

// 设置键值对
myMap.set('key1', 'value1');
myMap.set('key2', 'value2');
myMap.set(3, 'value3'); // 数字也可以作为键
myMap.set({name: 'keyObj'}, 'valueObj'); // 对象也可以作为键

// 读取键值对
console.log(myMap.get('key1')); // 输出: value1
console.log(myMap.get(3)); // 输出: value3
console.log(myMap.get({name: 'keyObj'})); // 输出: undefined,因为对象引用不同

// 正确获取对象键的值
let keyObj = {name: 'keyObj'};
myMap.set(keyObj, 'valueObj');
console.log(myMap.get(keyObj)); // 输出: valueObj

// 获取 Map 的大小
console.log(myMap.size); // 输出: 3

// 遍历 Map
for (let [key, value] of myMap) {
  console.log(key + ' = ' + value);
}

// 删除键值对
myMap.delete('key1');
console.log(myMap.has('key1')); // 输出: false

可能遇到的问题及解决方法

问题: 为什么 myMap.get({name: 'keyObj'}) 返回 undefined

原因: 在JavaScript中,对象是通过引用进行比较的。即使两个对象包含相同的数据,它们也被视为不同的键,除非它们引用的是同一个对象实例。

解决方法: 确保使用相同的对象引用作为键。

代码语言:txt
复制
let keyObj = {name: 'keyObj'};
myMap.set(keyObj, 'valueObj');
console.log(myMap.get(keyObj)); // 正确获取值

通过这种方式,你可以确保在使用对象作为键时能够正确地读取到关联的值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Case Study:读取设备的温度值?

    如果让你去读取 Android 设备的温度,并且告诉你这些温度的值都存在 /sys/class/thermal/thermal_zone 开头的目录下的 temp 文件当中,我们只需要读取它的平均值即可...1000.0 / count; } else { temperature = 0; } } } 我们定义了一个类,每一次构造这个类的对象的时候都会读取一个最新的温度的值存入这个对象的唯一的...在 Java 版本当中,我们先把符合要求的文件列出来,接着遍历他们去读取这些文件中的唯一一行,实际上就是温度的 1000 倍的一个整数,读到之后我们再求平均值。...我明明就只是想要读取文件的一行,结果前前后后写了那么多的模板代码 我明明就只是想要初始化一下 `temperature`,我们当然可以在最后用三元表达式来简化这一个过程,但如果条件更复杂呢?...知识点:try ... catch 是表达式,最后一行作为其值返回,表达式的类型推导取决于两个分支的返回值的公共父类(接口),如果有多个公共父类(接口),返回值类型默认推导为 Any,如果表达式值的接受者的类型是前面提到的多个公共父类

    1.2K10
    领券