ES6数组操作forEach map filter some every

forEach --代替普通 for 循环

forEach有两个参数,一个是回调函数,一个是回调函数的this指向。
回调函数有三个参数,第一个是数组每一项,一个是索引,一个是数组本身。
如果没有指定 this,那 this 默认就是 window,在回调函数里面 console.log(this); 即可。

        let out = [];
        let arr = ['aaa', 'bbb', 'ccc'];
        arr.forEach(function(item, index, arr) {
            console.log(item);
            this.push(item);
        }, out);
        console.log(out);
        
        /*
            aaa
            bbb
            ccc
            ['aaa', 'bbb', 'ccc']
        */

如上面这个例子,意思是循环输出数组 arr 的每一项,并且每一项push到 this,也就是 out,因为 this 指向 out,所以最后 out 就是 [‘aaa’, ‘bbb’, ‘ccc’]

map --重新整理数据结构

map会生成一个跟 arr 长度一样的数组,执行完返回一些东西,不返回值就是undefined

let arr = ['aaa', 'bbb', 'ccc'];
        let data = arr.map((item, index, arr) => {

        });
        console.log(data);
        
        /*
            [undefined, undefined, undefined]
        */

如上面这个例子,因为我没有设置 return 什么,于是打印了一个 [undefined, undefined, undefined] 的数组。
如果我们每一个都 return 1; 就生成 [1, 1, 1]

let arr = ['aaa', 'bbb', 'ccc'];
        let data = arr.map((item, index, arr) => {
            return 1;
        });
        console.log(data);
        
        /*
            [1, 1, 1]
        */

如果我们附加了条件,会怎么样呢?你应该猜到了吧?

let arr = ['aaa', 'bbb', 'ccc'];
        let data = arr.map((item, index, arr) => {
            if (item == 'aaa') {
                return 1;
            }
        });
        
        console.log(data);
        /*
            [1, undefined, undefined]
        */

只有这个项是 ‘aaa’ 的时候才 return 1; 所以其他的都是 undefined

filter --过滤掉不合格的项

filter把数组中符合条件的留下来。

let arr = ['iPhone', 'iPad', 'MacBook'];
        let data = arr.filter((item, index, arr) => {
            return item.includes('i');
        });
        console.log(data);
        
        /*
            ["iPhone", "iPad"]
        */

如上面这个例子,如果这项含有 ‘i’ 才留下来,所以 'MacBook’被剔除掉了,过滤掉了,也就是 filter。

some --类似查找

some的用法是,如果数组里有某一项符合条件就返回 true,都没有就是 false了。为了方便使用,通常把some封装一下,函数名就叫做 findInArr 吧,“在数组中找”的意思。

		let findInArr = (data, val) => {
            let status = data.some((item, index, data) => {
                return item.includes(val);
            });
            console.log(status);
        };
        
        let arr = ['iPhone', 'iPad', 'MacBook'];
        findInArr(arr, 'i');
        findInArr(arr, 'z');
        
        /*
            true
            false
        */

封装成这个函数的作用,就是判断传进去的数组某一项是否包含某个字符串,返回 true 或 false,然后打印出来。
第一次调用判断数组 arr 里面某一项是否包含 ‘i’,返回 true,第二次调用则是 ‘z’,返回 false

every --与some大同小异

every跟some的差别就在于,some是一项符合条件就返回 true,而every,顾名思义,就是每一项都得符合条件才返回 true,所以代码大同小异,这个看看就懂。

		let findInArr = (data, val) => {
            let status = data.every((item, index, data) => {
                return item.includes(val);
            });
            console.log(status);
        };

        let arr = ['iPhone', 'iPod', 'MacBook'];
        findInArr(arr, 'i');
        findInArr(arr, 'o');
        
        /*
            false
            true
        */

第一次调用判断数组 arr 里面每一项是否包含 ‘i’,返回 false,第二次调用则是 ‘o’,返回 true

拜拜~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值