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;
}
网友评论