FrankKai.github.io
FrankKai.github.io copied to clipboard
手写Array.prototype.*
主要手写一些常用的Array.prototype上的函数。
- 手写filter
- 手写map
- 手写every
手写filter
- 实现
- 测试
实现
const filter = (arr, callback) => {
const result = [];
for (let i = 0; i < arr.length; i++) {
const validate = callback(arr[i], i, arr);
if (validate) {
result.push(arr[i]);
}
}
return result;
};
测试
const arr = [1, 2, 3, 4];
/**
* 1.测试callback入参
*/
filter(arr, (item, index, arr) => console.log(item, index, arr));
/**
* 2.测试callback断言
*/
let filterArr = filter(arr, (item) => item > 1);
console.log(filterArr);
手写map
- 实现
- 测试
实现
const map = (arr, callback) => {
const result = [];
for (let i = 0; i < arr.length; i++) {
result.push(callback(arr[i], i, arr));
}
return result;
};
测试
const arr = [1, 2, 3, 4];
/**
* 1.测试callback入参
*/
map(arr, (item, index, arr) => console.log(item, index, arr));
/**
* 2.测试callback映射
*/
let mapArr = map(arr, (item, index) => ({ value: item, index }));
console.log(mapArr);
手写every
- 实现
- 测试
实现
const every = (arr, callback) => {
let result = true;
for (let i = 0; i < arr.length; i++) {
if (!callback(arr[i], i, arr)) {
result = false;
break;
}
}
return result;
};
测试
const arr = [1, 2, 3, 4];
/**
* 1.测试callback入参
*/
every(arr, (item, index, arr) => console.log(item, index, arr));
/**
* 2.测试callback断言
*/
let everyTruthy = every(arr, (item) => item > 0);
let everyFalsy = every(arr, (item) => item > 2);
console.log(everyTruthy, everyFalsy); // true, false