🐋成员文章

JavaScript基础学习-数组中的常用遍历方法

2017-02-16  本文已影响11人  不是王小贱

数组常用的遍历方法

这几个方法都不会改变原数组。这些方法只有在实际应用中才能体会到它们的强大作用,这里只是罗列它们的一些知识点。

forEach() IE6-8不兼容

理论上是没有返回值的,仅仅是对数组进行遍历,不会改变数组。但是可以通过索引来改变原有的值
无法直接退出循环,只能使用return来达到for循环中continue的效果。

回掉函数中的作用

会传递三个参数

  • item 数组中的当前项
  • index 当前项的索引index
  • 原始数组 input

执行次数

  • 数组中有几项,那么传递进去的匿名回调函数就会执行几次

map() IE6-8不兼容

和forEach非常类似,但是map的回调函数中支持返回值:return的是啥,相当于把数组中的这一项变为啥

    var num = 3;
var obj = {name:100};
var arr = [{name:1},{name:3},{name:2},{name:3}];
var newArr = arr.map(function (item,index) {//返回成一个新的数组
    if(item.name == num){ //如果当前项找到了,将最新的对象返回替换掉原有的
        return obj;
    }
    return item;
}); 

filter() 过滤 ES5

该方法可以看作是过滤,按照某规则提取出一些特定的项来,生成一个新数组,但新数组的长度小于或等于原数组

    var num = 3;
var arr = [{name:1},{name:3},{name:2},{name:3}];
//filter 过滤 如果在filter函数中返回true表示保留,返回false删除,
var newArr = arr.filter(function (item,index) {
    return item.name != num;
});
//会返回一个新的数组

find() 查找 ES6

find方法对数组中的每一项元素执行一次callback函数,直到有一个callback返回true,就会停止执行。意味着,只要找到符合条件的那一项,返回true。并把这一项的值返回。就不再查找了

    //查询(find)  findOne 查到一项后返回当前项 不继续查找
var num = 3;
var arr = [{name:1},{name:3,age:100},{name:2},{name:3}];
//返回找到的那一项
var obj = arr.find(function (item,index) {
    //找到后返回true即可
    if(item.name ==num){
        return true;//返回true则会将当前item返回
    }
});

findIndex()es6

和find方法一样,只是返回不一样,find返回的当前符合条件的元素,而findIndex返回的是符合条件的元素的索引。

every()方法

方法使用传入的函数测试所有的元素,只要其中有一个函数返回值为false,那么该方法的结果为false;如果全部返回true,那么该方法的结果才为true.

some()方法

与every()方法正好相反,some测试数组元素时,只要有一个函数返回值为true,则该方法返回true,若全部返回false,则该方法返回false。

reduce()方法

reduce()方法接受一个方法作为累加器,数组中的每一值(从左到右)开始合并,最终为一个值

语法:arr.reduce(fn, initialValue)

fn 表示在数组每一项上执行的函数,接受四个参数:

initialValue指定第一次调用fn的第一个参数。

当fn第一次执行时:

  var ary = [3,4,5,6];
  var res = ary.reduce(function (pre,value,index,array) {
    return pre+value
},1);
console.log(res);// 19

const data = ['car', 'car', 'truck', 'truck', 'bike', 'walk', 'car', 'van', 'bike', 'walk', 'car', 'van', 'car', 'truck', 'pogostick'];
    const transportation = data.reduce(function(obj, item) {
        if (!obj[item]) {
            obj[item] = 0;
        }
        obj[item]++;
        return obj;
    }, {});
    console.log(transportation);

reduceRight

与reduce一致,只是累加的方向该为从右往左累加

entries(ES6)

返回一个数组迭代器对象,该对象包含数组中每个索引的键值对;

语法:arr.entries()

var ary = [1,2,3,4,5];
var res = ary.entries();
console.log(res.next()); // { value: [ 0, 1 ], done: false }
console.log(res.next().value);// [ 1, 2 ]

keys(ES6)

返回一个数组索引的迭代器,类似于entries,只是返回的都是索引。

上一篇下一篇

猜你喜欢

热点阅读