js 数组知识

2021-01-08  本文已影响0人  ynwshy

forEach 循环跳出

我们都知道for循环里要跳出整个循环是使用break,但在数组中用forEach循环如要退出整个循环呢?使用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;
}
上一篇下一篇

猜你喜欢

热点阅读