数组方法重写
Chao 工程师

forEach

1
2
3
4
5
6
7
8
Array.prototype.myEach = function (fn) {
var arr = this;
var obj = arguments[1] || window;
for (let i = 0; i < arr.length; i++) {
const item = arr[i];
fn.apply(obj, [item, i, arr])
}
}

map

1
2
3
4
5
6
7
8
9
10
11
12
Array.prototype.myMap = function (fn) {
var arr = this;
var obj = arguments[1] || window;
var newArr = [];
for (let i = 0; i < arr.length; i++) {
const item = deepClone(arr[i]);
newArr.push(
fn.apply(obj, [item, i, arr])
)
}
return newArr;
}

reduce

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Array.prototype.myReduce = function (fn, initialValue) {
let arr = this;
let prev;
if (initialValue) {
prev = initialValue;
for (let i = 0; i < arr.length; i++) {
const item = arr[i];
prev = fn(prev, item, i, arr);
}
} else {
prev = arr[0];
for (let i = 1; i < arr.length; i++) {
const item = arr[i];
prev = fn(prev, item, i - 1, arr);
}
}
return prev;
}

数组扁平化:

1
2
3
4
5
6
7
8
9
10
11
12
13
const arr = [1, [2, [3, 4]]];

function flatten (arr) {
let res = [];
for (const v of arr) {
if(Array.isArray(v)) {
res.push(...flatten(v));
} else {
res.push(v);
}
}
return res;
}
 Comments