<script>
1.手写forEach方法
let arr = [11, 22, 34, 56, 78, 32, 54]
console.log('********************forEach**********************');
function ForEach(arr, callback) {
for (let i = 0; i < arr.length; i++) {
callback(arr[i], i)
}
}
ForEach(arr, (item, index) => {
console.log(index + '--' + item);
})
2.手写ffter
console.log('********************filter**********************');
function filter(arr, callback) {
let arr2 = [] //定义一个空的数组
for (let i = 0; i < arr.length; i++) {
if (callback(arr[i])) {
arr2.push(arr[i])
}
}
return arr2
}
let arr2 = filter(arr, function (item) {
return item % 2 === 0
})
console.log(arr2);
3.手写find方法
console.log('********************find**********************');
function find(arr, callback) {
for (let i = 0; i < arr.length; i++) {
if (callback(arr[i])) {
return arr[i]
}
}
}
let num1 = find(arr, function (item) {
return item % 3 === 0
})
console.log(num1);
4.手写findIndex方法
console.log('********************findIndex**********************');
function findIndex(arr, callback) {
for (let i = 0; i < arr.length; i++) {
if (callback(arr[i])) {
return i
}
}
return -1 //找不到返回-1
}
let index1 = findIndex(arr, function (item) {
return item % 3 === 0
})
console.log(index1);
5.手写some方法
console.log('********************some**********************');
function some(arr, callback) {
for (let i = 0; i < arr.length; i++) {
if (callback(arr[i])) {
return true
}
}
return false
}
let isok1 = some(arr, function (item) {
return item % 3 === 0
})
console.log(isok1);
6.手写every方法
console.log('********************every**********************');
function every(arr, callback) {
for (let i = 0; i < arr.length; i++) {
if (!callback(arr[i])) {
return false
}
}
return true
}
let isok2 = every(arr, function (item) {
return item > 10
})
console.log(isok2);
console.log('********************map**********************');
function map(arr, callback) {
let arr2 = [] //定义一个新的数组
for (let i = 0; i < arr.length; i++) {
arr2.push(callback(arr[i]))
}
return arr2
}
let arr3 = map(arr, function (item) {
return item * 2
})
console.log(arr3);
8.手写sort方法
console.log('********************sort**********************');
function sort(arr, callback) {
for (let i = 0; i < arr.length - 1; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (callback(arr[i], arr[j]) > 0) { // 这里的>0就是进行判断前一位大于后一位,或者后一位大于前一位判断是否要进行替换,从而决定升序还是降序,a-b大于0才能得出a大于b也就是等于前一位大于后一位
let temp = arr[i]
arr[i] = arr[j]
arr[j] = temp
}
}
}
return arr
}
console.log(sort(arr, (a, b) => a - b)); //升序 这里的a=arr[i]
console.log(sort(arr, (a, b) => b - a)); //降序 这里的b=arr[j]
console.log('********************reduce**********************');
9.手写reduce()方法
function reduce(arr, callback, initNum) {
let sum = 0 //定义总数
for (let i = 0; i < arr.length; i++) {
let r = callback(initNum, arr[i]) //imitNum这里代表的是a的值,arr[i]这里代表的是b的值
sum = r //每次返回的结果需要替换sum
initNum = r //每次返回的结果,需要替换initNum
}
return initNum
}
console.log(reduce(arr, (a, b) => a + b, 0));
console.log('********************reduceRight**********************');
5
function reduceRight(arr, callback, initNum) {
for (let i=arr.length-1;i>=0;i--) {
let r = callback(arr[i],initNum)
initNum = r //每次返回的结果,需要替换initNum
}
return initNum
}
console.log(reduceRight(arr, (a, b) => a + b, 0));
</script>