解题思路 思路一: 利用map存储nums的值和对应的下标值。 遍历nums依次计算target-nums[i] 如果map中存在target-nums[i]值,就获取对应的index值。
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
// console.log(nums,'nums')
let map = new Map()
nums.map((item,index)=>{
map.set(item,index)
})
for(let i=0;i<nums.length;i++){
if(map.has(target-nums[i])&&i!=map.get(target-nums[i])){
return [i,map.get(target-nums[i])]
}
}
};
附加小知识:map主要用来存储键值对。 map相关小知识
创建一个map对象:
let map = new Map()
map对象初始化: 初始化是一个二维数组, 二维数组中存储的是key和value值
let map = new Map([[key,value],[key,value]])
设置键值对:
map.set(key,value)
获取值(根据key获取value):
let value = map.get(key)
获取键值对数组:
map.entries()
获取键数组:
map.keys() 返回的是一个对象
获取之数组:
map.values() 返回的是一个对象
map数据类型可以转换为数组、对象
console.log([...map.keys()]);
console.log([...map.values()]);
console.log([...map.entries()]);
console.log([...map]);
//[ '1', '2' ]
//[ 'hello', 'nihao' ]
//[ [ '1', 'hello' ], [ '2', 'nihao' ] ]
//[ [ '1', 'hello' ], [ '2', 'nihao' ] ]
map结合filter进行过滤处理
let map = new Map();
map.set('1', 10);
map.set('2', 20);
console.log(map);
let map1 = new Map(
[...map].filter(([key, value]) => {
console.log(key, value);
return value < 30;
}),
);
console.log(map1);
map的forEach方法
let map = new Map();
map.set('1', 'hello');
map.set('2', 'nihao');
//第一个参数是value,第二个参数是key,第三个参数是map对象
map.forEach((value, key, map) => {
console.log(value, key, map);
});
// hello 1 Map { '1' => 'hello', '2' => 'nihao' }
// nihao 2 Map { '1' => 'hello', '2' => 'nihao' }
对象的遍历:使用of
for (let key of map.keys()) {
console.log(key, 'key');
}
for (let value of map.values()) {
console.log(value, 'value');
}
for (let [key, value] of map.entries()) {
console.log(key, value, 'key,value');
}
Map的keys和values返回的是对象形式
Object的keys和values返回的是数组形式
Object.keys()返回的是一个数组
Object.values()返回的是一个数组
Object.entries()返回的是一个二维数组
let obj = { 1: 'a', 2: 'b' };
console.log(Object.entries(obj));
//[ [ '1', 'a' ], [ '2', 'b' ] ]
console.log(Object.keys(obj));
//[ '1', '2' ]
console.log(Object.values(obj));
//[ 'a', 'b' ]