1.Array.prototype.newPush();
用原生JS还原 push 方法,大致思路就是在 Array 的原型中添加一个 newPush 方法,首先 push 方法的作用是在数组后面添加一个或多个元素并返回添加元素之后的新数组,那么我们既然要在数组后面添加新的元素,就要获取数组的长度还有要新增的元素的个数,然后去遍历要新增的元素,最后每次循环中用 arr [ arrlen + i ] = arguments [ i ] 在原数组最后面添加相应第 i 个新增元素即可,代码如下。
var arr = [1,2,3,4,5]
Array.prototype.newPush = function () {
var arrlen = this.length;
var arglen = arguments.length;
for (var i = 0 ; i < arglen ; i++){
arr[ arrlen + i ] = arguments[ i ];
}
return arr;
}
var aa = arr.newPush(44,55,66);
console.log(aa)
运行结果如下。
2.Array.prototype.newEvery();
用原生 JS 还原 every 方法,首先 every 方法的作用是判断数组中每一个元素是否满足判定条件,当数组中每一个元素都符合条件时返回 true ,反之则返回 false ,他需要一个参数,而这个参数必须是一个函数,大概思路就是先去判断传进来的是否为函数,如果是,循环数组,判断不满足条件的元素,返回 false 终止后续代码执行,如果没有不符合条件的元素,自然就会返回 true,也就达到了 every 方法的效果,代码如下。
let arr = [22,33,44,55,66,68];
Array.prototype.newEvery = function ( fun ) {
if ( typeof fun != "function" ){
throw new TypeError( `${fun} 不是一个函数呀傻瓜` )
}
//循环数组
for ( let i = 0 ; i < this.length ; i++ ){
//如果不满足条件返回false,同时后续将不会继续进行判断
if ( !fun(this[i]) ){
return false;
}
}
return true;
}
let aa = arr.newEvery( function (x) {
return x < 67;
} )
console.log(aa)
需要注意的是这里 return true 要放到循环外部,如果放到循环里面的话,循环内的 if 判断将无意义,因为你放到循环内部的话,元素组如果第一个元素满足条件,第二个元素不满足条件,则会直接返回 true ,这样达不到 every 的效果,运行结果如下。
3.Array.prototype.newSome();
用原生 JS 还原 some 方法,首先 some 方法的作用是对数组中的每一个元素进行判断,只要有一个满足条件的元素就会返回 true ,否则返回 false ,这里 some 方法需要一个参数,而且这个参数必须是一个函数 ,那么我的大体思路就是判断传进来的参数是否为函数,如果是,循环数组,判断只要有一个满足条件的元素,就返回 true ,如果数组中一个满足判定条件的元素都没有,则返回 false ,代码如下。
let arr = [22,33,44,55,66,68];
Array.prototype.newSome = function ( fun ) {
if ( typeof fun != "function" ){
throw new TypeError( `${fun} 不是一个函数呀傻瓜!!!` )
}
//循环数组
for (let i = 0 ; i < this.length ; i++ ){
//只要有一个满足条件的元素,就返回true,如果数组中一个满足判定条件的元素都没有,则会跳出循环,返回false
if ( fun(this[i]) ){
return true;
}
}
return false;
}
let aa = arr.newSome( function (x) {
return x < 67;
} )
console.log(aa)
运行结果如下。
4.Array.prototype.newPop();
用原生 JS 还原 pop 方法,pop 方法的作用是将该数组的最后一位元素删除,并返回删除的元素,pop 是会改变数组长度的,大体思路就是先把数组最后一个元素赋值给 i ,然后将数组长度减 1,最后返回 i ,代码如下。
let arr = [11,22,33,44,789,undefined];
Array.prototype.newPop = function () {
//将数组最后一个元素赋值给i
let i = this[this.length-1];
//将数组长度减1,自然就能达到删除数组最后一个元素的效果
this.length--;
return i;
}
let aa = arr.newPop()
console.log(aa)
运行结果如下。