小书童
发布时间

JS跳出循环

作者

js 中终止循环分为:终止本次循环,终止循环体,终止的形式也各有不同包括:return true fasle break 等,对应不同场景终止循环需要使用不同形式。

every 循环

  • 用于检测数组所有元素是否都符合指定条件;
  • 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测,既 return false 时跳出整个循环;
  • 如果所有元素都满足条件,则返回 true;
  • return true 则执行下一次循环;
  • 无 return 则默认 return false 跳出整个循环;
  • 不会对空数组进行检测;
  • 不会改变原始数组;
let list = [1, 2, 3, 4, 5]
list.every((value, index) => {
  if (value > 3) {
    console.log(value) // 4
    return false
  } else {
    console.log(value) // 1 2 3
    return true
  }
})

list.every((value, index) => {
  if (value > 3) {
    console.log(value)
    return false
  } else {
    console.log(value) // 1
    // return true; 如果没有返回值true 的话,也会跳出循环
  }
})

forEach 循环

  • 无返回值,只依次处理每个元素(使用 callback);
  • 对于空数组是不会执行回调函数的;
  • 引发异常外,没有其他方法可以停止或中断循环
  • forEach 的本事是异步函数,但是其内部 callback 是同步的;
let list = [1, 2, 3, 4, 5]
let sum = 0

list.forEach((value, index) => {
  if (value > 3) {
    console.log(value) // 4 5
    return false // 没有返回值,ruturn false 仍向下执行
  } else {
    console.log(value) // 1 2 3
    return true // 没有返回值,ruturn true 仍向下执行
  }
})

let sumFunction = async function (a, b) {
  return a + b
}

list.forEach(async function (item) {
  sum = await sumFunction(sum, item)
})

console.log(sum) // 0
setTimeout(() => console.log(sum)) // 1

some 循环

  • 用于检测数组中的元素是否满足指定条件;
  • 如果有一个元素满足条件,则表达式返回 true , 剩余的元素不会再执行检测,既 return true 时跳出整个循环;
  • 如果没有满足条件的元素,则返回 false;
  • 无 return 则默认 return false 继续循环;
  • 不会对空数组进行检测;
  • 不会改变原始数组;
let list = [1, 2, 3, 4, 5]
list.some((value, index) => {
  if (value === 3) {
    return true // 当内部return true时跳出整个循环
  }
  console.log(value) // 1 2
})

map 循环

  • 返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值;
  • 不会对空数组进行检测;
  • 不会改变原始数组;
let list = [1, 2, 3, 4, 5]
const resultA = list.map(parseInt) // 1, NaN, NaN, NaN, NaN
const resultB = list.map((item) => parseInt(item)) // 1, 2, 3, 4, 5

filter 循环

  • 创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素
  • 不会对空数组进行检测;
  • 不会改变原始数组;
let newArray = arr.filter(callback(element[, index, [array]])[, thisArg]);

let fruits = ['apple', 'banana', 'grapes', 'mango', 'orange']

/**
 * Filter array items based on search criteria (query)
 */
function filterItems(arr, query) {
  return arr.filter(function(el) {
      return el.toLowerCase().indexOf(query.toLowerCase()) !== -1
  })
}

console.log(filterItems(fruits, 'ap'))  // ['apple', 'grapes']
console.log(filterItems(fruits, 'an'))  // ['banana', 'mango', 'orange']

find 方法

  • 返回通过测试(函数内判断)的数组的第一个元素的值;
  • 数组中的每个元素都调用一次函数执行;
  • 当数组中的元素在测试条件时返回 true 时, find() 返回符合条件的元素,之后的值不会再调用执行函数;
  • 如果没有符合条件的元素返回 undefined
  • 不会对空数组进行检测;
  • 不会改变原始数组;
array.find(function(currentValue, index, arr),thisValue);
let list = [1,2,3,4,5];
const result = list.find(item => item > 2);
console.log(result); // 3

findIndex 方法

  • 返回传入一个测试条件(函数)符合条件的数组第一个元素位置;
  • 数组中的每个元素都调用一次函数执行;
  • 当数组中的元素在测试条件时返回 true 时, find() 返回符合条件的元素,之后的值不会再调用执行函数;
  • 如果没有符合条件的元素返回 undefined
  • 不会对空数组进行检测;
  • 不会改变原始数组;
array.findIndex(function(currentValue, index, arr),thisValue);
let list = [1,2,3,4,5];
const result = list.findIndex(item => item > 2);
console.log(result); // 2