目录
Array.prototype.mymap = function (fn) {
// 结果数组
let results = [];
// 遍历this
for (let i = 0; i < this.length; i++) {
results.push(fn(this[i]));
}
return results;
}
var arr1 = [3, 4, 5, 6, 9];
var arr2 = arr1.mymap(item => item * 2);
console.log(arr2);
封装自己的filter方法(超级高频面试题)
Array.prototype.myfilter = function (fn) {
// 结果数组
let results = [];
// 遍历this(this就是调用myfitler的数组)
for (let i = 0; i < this.length; i++) {
if (fn(this[i])) {
results.push(this[i]);
}
}
return results;
}
封装自己的reduce方法
Array.prototype.myreduce = function (fn) {
let yiyou = this[0];
for (let i = 1; i < this.length; i++) {
yiyou = fn(yiyou, this[i]);
}
return yiyou;
};
严谨版:可以添加额外的参数,表示默认值,比如数组去重时:
let result = arr.myreduce((a, b) => a.includes(b) ? a : [...a, b], []);
Array.prototype.myreduce = function (fn, defaultValue) {
let yiyou, startIndex;
// 判断有没有传入第二个参数
if (defaultValue == undefined) {
// 没有传入第二个参数
yiyou = this[0];
// 从下标为1开始遍历
startIndex = 1;
} else {
// 传了第二个参数(默认值)
yiyou = defaultValue;
// 从下标为0开始遍历
startIndex = 0;
}
for (let i = startIndex; i < this.length; i++) {
yiyou = fn(yiyou, this[i]);
}
return yiyou;
};
用三种方法实现数组去重
方法1:reduce法:
var result = arr.reduce((a, b) => a.includes(b) ? a : [...a, b], []);
方法2:遍历法:
var results = [];
for (let i = 0; i < arr.length; i++) {
if (!results.includes(arr[i])) {
results.push(arr[i]);
}
}
console.log(results);
方法3:Set法。最最优雅的方法。
Set
是ES7中新增的一个