- map(): 返回一个由回调函数的返回值组成的新数组
- filter(): 将所有在过滤函数中返回 true 的数组元素放进一个新数组中并返回
- find(): 找到第一个满足测试函数的元素并返回那个元素的值,如果找不到,则返回 undefined。
- findIndex(): 找到第一个满足测试函数的元素并返回那个元素的索引,如果找不到,则返回 -1。
- every(): 如果数组中的每个元素都满足测试函数,则返回 true,否则返回 false。
- some(): 如果数组中至少有一个元素满足测试函数,则返回 true,否则返回 false。
- reduce(): 从左到右为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的返回值
/*
实现map()
*/
export function map (array, callback) {
const arr = []
for (let i = 0; i < array.length; i++) {
arr.push(callback(array[i], i))
}
return arr
}
/*
实现filter()
*/
export function filter(array, callback) {
const arr = []
for (let i = 0; i < array.length; i++) {
if (callback(array[i], i)) {
arr.push(array[i])
}
}
return arr
}
/*
实现find()
*/
export function find (array, callback) {
for (let i = 0; i < array.length; i++) {
if (callback(array[i], i)) {
return array[i]
}
}
return undefined
}
/*
实现findIndex()
*/
export function findIndex (array, callback) {
for (let i = 0; i < array.length; i++) {
if (callback(array[i], i)) {
return i
}
}
return -1
}
实现every()
*/
export function every (array, callback) {
for (let i = 0; i < array.length; i++) {
if (!callback(array[i], i)) { // 只有一个结果为false, 直接返回false
return false
}
}
return true
}
/*
实现some()
*/
export function some (array, callback) {
for (let i = 0; i < array.length; i++) {
if (callback(array[i], i)) { // 只有一个结果为true, 直接返回true
return true
}
}
return false
}
/*
reduce()
*/
function reduce(array, callback, initValue) {
let acc = initValue;
let startAtIndex = 0;
if (initValue === undefined) {
acc = array[0];
startAtIndex = 1;
}
for (let i = startAtIndex; i < array.length; i++) {
acc = callback(acc, array[i], i, array)
}
return acc;
}