数组方法相关原理

// 改变原数组 push、pop、unshift、shift、reverse、splice、sort
// 不改变 concat、toString、slice、join

// 数组乱序
arr = [ 1, 2, 3]
arr.sort(function(a, b) {
return Math.random() - 0.5
})

// push原理
Array.prototype.push = function (target) {
this[this.length] = target
this.length++
}

// 数组去重
Array.prototype.unique = function() {
var temp = {}
arr = []
len = this.length
for(var i = 0; i < len; i++) {
if(!temp[this[i]]) {
temp[this[i]] = ‘a’
arr.push(this[i])
}
}
return arr
}

// https://blog.csdn.net/weixin_43873449/article/details/99178758
// 遍历:forEach、filter、map、every、some、reduce

// 剖析forEach源码
Array.prototype.myForEach = function (func) {
var self = this,
len = self.length,
param2 = arguments[1] || window;
for(var i = 0; i < len; i++){
func.apply(param2, [self[i], i, self]);
}
}
// 剖析filter源码
Array.prototype.myFilter = function (func) {
var self = this,
len = self.length,
param2 = arguments[1] || window,
newArr = [];
for(var i = 0; i < len; i++){
func.apply(param2, [self[i], i, self]) ? newArr.push(self[i]) : ‘’;
}
return newArr;
}
// 剖析map源码
Array.prototype.myMap = function (func) {
var self = this,
len = self.length,
param2 = arguments[1] || window,
newArr = [];
for(var i = 0; i < len; i++){
newArr.push(func.apply(param2, [self[i], i, self]));
}
return newArr;
}
// 剖析every源码
Array.prototype.myEvery = function (func) {
var self = this,
len = self.length,
param2 = arguments[1] || window,
flag = true;
for (var i = 0; i < len; i++) {
if(!func.apply(param2, [self[i], i, self])){
flag = false;
break;
}
}
return flag;
}
// 剖析some源码
Array.prototype.mySome = function (func) {
var self = this,
len = self.length,
param2 = arguments[1] || window,
flag = false;
for (var i = 0; i < len; i++) {
if(func.apply(param2, [self[i], i, self])){
flag = true;
break;
}
}
return flag;
}
// 剖析reduce源码
// 增加改变this指向功能
Array.prototype.myReduce = function (func, initValue) {
var self = this,
len = self.length,
param2 = arguments[2] || window;
for (var i = 0; i < len; i++) {
initValue = func.apply(param2, [initValue, self[i], i, self]);
}
return initValue;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值