• JavaScript形而上的For循环中的Break


    break相当于循环中的GOTO,需避免使用。

    下面是一个break使用例子。
    找出第一个months小于7的项目。

    const cats = [
      { name: 'Mojo',    months: 84 },
      { name: 'Mao-Mao', months: 34 },
      { name: 'Waffles', months: 4 },
      { name: 'Pickles', months: 6 }
    ]
    const isKitten = cat => cat.months < 7
    var firstKitten
    for (var i = 0; i < cats.length; i++) {
      if (isKitten(cats[i])) {
        firstKitten = cats[i]
        break
      }
    }
    

    类似的例子,找出前五个项目。

    var first5Kittens = []
    // old-school edge case kitty loop
    for (var i = 0; i < cats.length; i++) {
      if (isKitten(cats[i])) {
        first5Kittens.push(cats[i])
        if (first5Kittens.length >= 5) {
          break
        }
      }
    }
    

    对上面的例子进行改造。
    用函数封装下。用limit来代替5,predicate来代替isKitten,list来代替cats。然后把这些作为函数的参数。

    const takeFirst = (limit, predicate, list) => {
      const newList = []
      
      for (var i = 0; i < list.length; i++) {
        if (predicate(list[i])) {
          newList.push(list[i])
      
          if (newList.length >= limit) {
            break
          }
        }
      }
      
      return newList
    }
    

    使用递归形式来表示循环,跳出递归即break。

    
    const takeFirst = (limit, predicate, list, i = 0, newList = []) => {
      const isDone = limit <= 0 || i >= list.length
      const isMatch = isDone ? undefined : predicate(list[i])
      
      if (isDone) {
        return newList
      } else if (isMatch) {
        return takeFirst(limit - 1, predicate, list, i + 1, [...newList, list[i]])
      } else {
        return takeFirst(limit, predicate, list, i + 1, newList)
      }
    }
    

    使用第三方库Lazy.js来实现这个需求。

    const result = Lazy(cats)
      .filter(isKitten)
      .take(5)
    

    参考:
    https://hackernoon.com/rethinking-javascript-break-is-the-goto-of-loops-51b27b1c85f8

  • 相关阅读:
    高并发 内核优化
    mysql 读写分离
    Jmeter使用入门
    Jenkins+Jmeter+Ant接口持续集成
    Android客户端稳定性测试——Monkey
    SVN客户端项目递归删除.svn目录
    Windows 下 php5+apache+mysql5 手工搭建笔记
    熟悉常用的Linux操作
    C语言文法
    词法分析实验报告
  • 原文地址:https://www.cnblogs.com/samwu/p/9593818.html
Copyright © 2020-2023  润新知