目录
1、find的手动实现
Array.prototype.findTest = function (fn) {
for (var i = 0; i < this.length; i++) {
var f = fn(this[i]);//把数组元素传递到函数中
if (f) { //如果函数的返回值为true
return this[i]; //则返回对应的数组元素
}
}
};
var arr = [1, 3, 6, 90, 23];
var result = arr.findTest(function (item) {
return item > 6;
});
console.log(result);
2、filter的手动实现
//模拟实现filter函数
Array.prototype.filterOne = function (fn) {
var newArray = [];
for (var i = 0; i < this.length; i++) {
var f = fn(this[i]);
if (f) {
newArray.push(this[i]);
}
}
return newArray;
};
var array = [65, 56, 89, 53];
var arr = array.filterOne(function (item) {
return item >= 60;
});
console.log("arr=", arr);
3、some的手动实现
//手动模式some方法
Array.prototype.someTest = function (fn) {
for (let i = 0; i < this.length; i++) {
let f = fn(this[i]);
if (f) {
return f;
}
}
return false;
};
let array = [1, 3, 5, 7, 90];
let result = array.someTest(function (item) {
return item > 10;
});
console.log("result=", result);
4、every的手动实现
//手动模拟实现`every`方法
Array.prototype.everyTest = function (fn) {
let f = true;
for (let i = 0; i < this.length; i++) {
let f = fn(this[i]);
if (!f) {
//只要有一个不符合,就立即返回false.
return false;
}
}
return f;
};
let array = [11, 31, 5, 71, 90];
let result = array.everyTest(function (item) {
return item > 10;
});
console.log("result=", result); //false
5、map的手动实现
//手动实现map方法
Array.prototype.mapTest = function (fn) {
let newArray = [];
for (let i = 0; i < this.length; i++) {
let f = fn(this[i], i, this);
newArray.push(f);
}
return newArray;
};
var arr = [1, 3, 6, 90, 23];
var result = arr.mapTest(function (element, index, array) {
console.log(index);
return element * element;
});
console.log("result: ===", result);
6、reduce的手动实现
Array.prototype.reduceTest = function (fn, initialValue) {
//如果没有传递initialValue,我们将使用数组的第一项作为initialValue的值
let hasInitialValue = initialValue !== undefined;
let value = hasInitialValue ? initialValue : this[0];
//如果没有传递initialValue,则索引从1开始,否则从0开始
for (let i = hasInitialValue ? 0 : 1, len = this.length; i < len; i++) {
value = fn(value, this[i], i, this);
}
return value;
};
var arr = [1, 2, 3, 4, 5, 6];
var sum = arr.reduceTest(function (accumulator, currentValue) {
return accumulator + currentValue;
}, 0);
console.log(sum);