美文网首页
js 数组知识

js 数组知识

作者: ynwshy | 来源:发表于2021-01-08 19:54 被阅读0次

    forEach 循环跳出

    我们都知道for循环里要跳出整个循环是使用break,但在数组中用forEach循环如要退出整个循环呢?使用break会报错,使用return也不能跳出循环。

    • 使用break将会报错:
    • 使用return也不能跳出整个循环:

    那么在用forEach()遍历数组时要如何才能跳出循环呢?经过查找资料后,我找到了两种方法可以实现跳出循环。

    第一种:使用try···catch捕获异常实现

    try {
        var array = ['first', 'second', 'third', 'fourth'];
        array.forEach(function(item, index) {
            if (item == 'third') {
                var a = aaaa; // first second 后就报错,就跳出循环了
                throw new Error('ending'); //报错,就跳出循环
            } else {
                console.log(item);
            }
        });
    } catch (e) {
        if (e.message == 'ending') {
            console.log('结束了');
        } else {
            console.log(e.message);
        }
    }
    

    第二种方法:使用arr.some()或者arr.every()替代

    some()当内部return true时跳出整个循环:

    var arr = [1, 2, 3, 4, 5];
    var num = 3;
    arr.some(function(v,idx) {
        if (v == num) {
        arr.splice(idx, 1); // 删除当前元素跳出
            return true;
        }
        console.log(v);
    });
    
    

    every()当内部return false时跳出整个循环

    var arr = [1, 2, 3, 4, 5];
    var num = 3;
    arr.every(function(v) {
        if (v == num) {
            return false;
        } else {
            console.log(v);
            return true;
        }
    });
    
    

    数组 去重

    1.ES6 的 Set

    let arr = [1,1,2,3,4,5,5,6]
    let arr2 = [...new Set(arr)]
    

    reduce()

    let arr = [1,1,2,3,4,5,5,6]
    let arr2 = arr.reduce(function(ar,cur) {
      if(!ar.includes(cur)) {
        ar.push(cur)
      }
      return ar
    },[])
    

    filter()

    // 这种方法会有一个问题:[1,'1']会被当做相同元素,最终输入[1]
    let arr = [1,1,2,3,4,5,5,6]
    let arr2 = arr.filter(function(item,index) {
      // indexOf() 方法可返回某个指定的 字符串值 在字符串中首次出现的位置
      return arr.indexOf(item,0) === index
    })
    

    数组扁平化

    ary.flat(Infinity)
    
    # reduce
    function flatten(arr) {  
        return arr.reduce((result, item)=> {
            return result.concat(Array.isArray(item) ? flatten(item) : item);
        }, []);
    }
    
    # toString
    function flatten(arr) {
        return arr.toString().split(',').map(function(item) {
            return Number(item);
        })
    } 
    
    # join
    function flatten(arr) {
        return arr.join(',').split(',').map(function(item) {
            return parseInt(item);
        })
    }
    
    # 递归
    function flatten(arr) {
        var res = [];
        arr.map(item => {
            if(Array.isArray(item)) {
                res = res.concat(flatten(item));
            } else {
                res.push(item);
            }
        });
        return res;
    }
    
    # 扩展运算符
    # [].concat(...[1, 2, 3, [4, 5]]);  // [1, 2, 3, 4, 5]
    function flatten(arr) {
        while(arr.some(item=>Array.isArray(item))) {
            arr = [].concat(...arr);
        }
        return arr;
    }
    

    相关文章

      网友评论

          本文标题:js 数组知识

          本文链接:https://www.haomeiwen.com/subject/hopfaktx.html