forEach、map几个函数的功能和应用场景

在做项目时,经常会遇到处理数组的情况,JS提供了一个原生的API,比如:forEach、map 等等。在这里我们简单介绍这几个函数的应用场景,方便大家做项目时能够写少点代码,“偷点懒”。

forEach

forEach() 方法对数组的每个元素执行一次给定的函数。
使用场景:当我们对数组的元素进行处理时(例如:增加元素,元素值改变),可以使用这个函数
for example: 添加status 字段

let blogs = [
    {title:"胡三疯是帅锅",time:"2021-05-06", id: 1},
    {title:"胡三疯是大帅锅",time:"2022-09-05",id: 2} 
]

blogs.forEach(item=>{
    item.status = "已发布"
})

模拟实现forEach方法:

function forEach(arr, fn) {
    for(i = 0; i < arr.length; i++) {
        fn(arr[i])
    }
}

// Test
let arr = [1, 4, 6];
forEach(arr, function (item) {
    console.log(item);
})

map

map() 方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。
使用场景:当我们调用接口时,数组数据不满足接口的数据格式,若当前数组数据和页面组件绑定,那么我们就不能直接使用forEach 改变当前数组,就需要使用map 在当前数组数据基础下,返回新的数组数据。
for example: 添加name属性,取值id, 并删除id 属性

let blogs = [
    {title:"胡三疯是帅锅",time:"2021-05-06", id: 1},
    {title:"胡三疯是大帅锅",time:"2022-09-05",id: 2} 
]

let newBlogs = blogs.map(item=>{
    return {
        ...item ,
        name:item.id,
        id:null
    };
})

模拟map实现:

const map = (arr, fn) => {
    let result = [];
    for(let value of arr) {
        result.push(fn(value));
    }
    return result;
}

let arr = [1, 3, 5];
arr = map(arr, v => v * v);
console.log(arr);

filter

filter() 方法创建一个新数组, 其包含 符合函数条件的所有元素
使用场景:当我们提交接口时,需要提交符合一定条件的元素组成的数组,就需要对原数组进行筛选。
for example:

const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
console.log(result)

filter的模拟实现:

function filter(arr, fn) {
    let results = [];
    for(let i = 0; i < arr.length; i++) {
        if(fn(arr[i])) {
            results.push(arr[i]);
        }
    }
    return results;
}

// Test
let arr = [1, 4, 5, 8];
console.log(filter(arr, i => i % 2 === 0));

every

every() 方法用来判断一个数组内的所有元素是否都满足某个指定的条件(回调函数)。
使用场景:当我们进行逻辑操作时,我们会根据某个数组是否都满足某个条件,来进行不同的操作,就会用到这个函数
for example

let everyArr = [
    {
        name: "张三",
        num: 60
    },
    {
        name: "张三",
        num: 50
    }
    
]

let res = everyArr.every(item=> item.num > 30)

every方法模拟实现:

const every = (arr, fn) => {
    let result = true;
    for(let value of arr) {
        result = fn(value);
        if(!result) {
            break
        }
    }
    return result;
}

let arr = [99, 90, 88];
let result = every(arr, v => v > 60);
console.log(result);

some

some() 方法是否至少有1个元素满足某个指定的条件
使用场景:经常用于判断数组中元素是否有一个满足某个条件,进行不同的操作

let everyArr = [
    {
        name: "张三",
        num: 60
    },
    {
        name: "张三",
        num: 50
    }
    
]

let res1 = everyArr.some(item=> item.num > 50)

some函数模拟实现:

const some = (arr, fn) => {
    let result = false;
    for(let value of arr) {
        result = fn(value);
        if(result) {
            break;
        }
    }
    return result;
}

// Test
let arr = [86, 90, 88];
let result = some(arr, v => v < 60);
console.log(result);

参考文献

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值