JS_LeetCode01:两数之和
1.两数之和
给定一个整数数组
nums
和一个整数目标值target
,请你在该数组中找出 和为目标值target
的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
哈希表(对象)
哈希表,英文名Hash Table,也叫做散列表。
它是以键值对形式存储数据的数据结构。是数组的扩展,利用了数组根据下标访问数据的特性。
核心原理是使用哈希函数(Hash Function),将键转为数组的索引,从而快速定位置值。
JS中的对象{ }就相当于一个哈希表,不过更推荐使用Map类型处理哈希表需求:
? Object与Map的区别
Map是ES6引入的数据结构,为了高效存取键值对优化的哈希表!没有原型链污染问题。
原型链污染:通过修改对象的原型,影响到所有基于这个原型创建的对象,造成安全漏洞。
1
2
3
4
5
6
7
8
const obj = {};
console.log(obj.toString); // 正常输出 [Function: toString]
obj.__proto__.hacked = true; // bj.__proto__ 实际上是 Object.prototype;
const another = {};
console.log(another.hacked); // 输出 true!它居然也被污染了
键的类型
- Object的键只能是字符串 或者 Symbol
- Map的键可以是任何类型
键的顺序
- Object没有明确顺序
- Map根据插入顺序迭代
性能
- Object有原型链影响,比较慢
- Map转为哈希映射优化,更快
解答
1 |
|