Objeck
1、它是一种最常见的引用类型的数据,可用于存储键值对的集合
2、键名都是字符串或者Symbol,非字符串类型会进行数据类型转换
3、定义对象:const obj = {} / new Object() / Object.create()
4、键名是无序的,大于0的整数,会按大小进行排序,对于小数和负数会当做字符串处理,Symbbol类型不会输出,通过Object.getOwnPropertySymbols()方法输出
5、长度: Object.keys(obj).length
6、JSON序列化:JSON.stringify(obj)
Map
1、它是键值对的集合,采用Hash结构存储,键名是
2、键名可以是任意数据类型,添加键时,会按照===来进行对比,注意NaN,NaN===NaN结果是false,但在Map这是为true的
3、定义一个Map:const map = new Map() / new Map([['a': 'a'], ['b': 'b']])
4、键名有顺序的,按插入的顺序返回
5、长度:直接size返回长度
6、不能直接序列化,JSON.stringfiy(Array.from(map))
总结
使用Object:数据类型确定是字符串或者Symbol、需要进行JSON序列化转换
使用Map:会频繁更新删除键值对、存储大量数据而且键名类型不确定
力扣第一题:
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
let map = new Map()
for(let i = 0; i < nums.length; i++}) {
const num = target - nums[i]
if (map.has(num)) {
return [map.get(num), i]
}
map.set(item, i)
}))
};