1.给定一个数组nums=[2,5,7,11],要求任意两个数组元素和等于指定的值target=9;并返回他们下标,return[0,2]
/**
* 方法1:
*/
var arr = [2,5,7,11],target = 9
function twonum(arr, target) {
const map = new Map();
for (var i = 0; i < arr.length;i++){
const complement = target - arr[i];
if(map.has(complement)){
return [map.get(complement),i]
}
map.set(arr[i],i)
}
}
console.log(twonum(arr,target));
// Expected output: [ 0, 2 ]
return [map.get(complement), i];这一行的意思是返回一个数组,其中包含两个元素。第一个元素是map.get(complement),它表示从哈希表map中获取与当前元素的差值complement对应的索引。第二个元素是i,它表示当前元素的索引。
map.get(complement)的作用是从哈希表map中获取与当前元素的差值complement对应的索引。如果哈希表中存在这个差值,则返回对应的索引;否则返回undefined。
例如,在上面给出的示例代码中,当遍历到数组中第三个元素(即7)时,计算出的差值为2(即9-7=2)。由于哈希表中存在键为2的项(即第一个元素),因此map.get(complement)返回0(即第一个元素的索引)。
map.has(complement)的作用是检查哈希表map中是否存在键为complement的项。如果存在,则返回true;否则返回false。
map.set(nums[i], i),我们首先计算出目标值与当前元素的差值complement,然后使用map.has(complement)检查哈希表中是否存在这个差值。如果存在,则返回对应的索引和当前元素的索引。否则,将当前元素及其索引存入哈希表中。
/**
* 方法2:
*/
var arr = [2,5,7,11],target = 9
function twonum(arr, target) {
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if(arr[i]+ arr[j] === target) {
return [i,j];
}
}
}
}
console.log(twonum(arr, target));
// Expected output: [ 0, 2 ]
2.重构pop() 方法
Array.prototype.newpop= function (){
if(this.length==0){
return undefined;
}
const lastElement = this[this.length-1];
this.length = this.length - 1;
return lastElement;
}
var arr = [1,2,3,4,5,6,7];
console.log(arr.newpop());
console.log(arr);
// Expected output:7
[ 1, 2, 3, 4, 5, 6 ]
3.重构push方法
Array.prototype.myPush = function(...arguments){
// [1 2 3,] this[this.length]
// 遍历调用myPush实际参数 把实际参数放在数组的末尾下一项
for(i=0;i<arguments.length;i++){
this[this.length]=arguments[i]
}
return this.length
}
var arr = ['hello','10',25];
var res = arr.myPush('tom','terry');
console.log(res,arr);
function fc(a,b){
// console.log(a,b)
// 函数内部属性 arguments 专门保存实际参数的类数组对象
console.log(arguments[3])
}
fc(1,2,3,4,5)
// Expected output:
5 [ 'hello', '10', 25, 'tom', 'terry' ]
4