整理javascript的观察者、迭代器模式、快速排序

1. 观察者模式

使用场景:事件监听机制(订阅发布)

优势:主题和观察者解耦

2. 迭代器(遍历器)模式

顺序访问一个集合,外界不需要知道内部实现,container用来封装一个集合对象,获取一个迭代器以后就可以顺序访问集合里面的对象。

 

es6中的Iterator对象:

ES6 规定,默认的 Iterator 接口部署在数据结构的”Symbol.iterator”属性,或者说,一个数据结构(Array,Set,Map,Object属性)只要具有Symbol.iterator属性,就可以认为是“可遍历的”(iterable)。Symbol.iterator属性本身是一个函数,就是当前数据结构默认的遍历器生成函数。执行这个函数,就会返回一个遍历器。

for…of用来遍历迭代器,for…in遍历对象属性

 

3. 快速排序

function quickSort(arr) {
_quickSort3Ways(arr, 0, arr.length – 1)
}
/* 快速排序 3路 <v =v >v*/
function _quickSort3Ways(arr, l, r) {

  if (l >= r) {

    return

  }

  // partition

  let random = Math.floor(Math.random() * (r - l) + l)

  ;[arr[l], arr[random]] = [arr[random], arr[l]]

  let v = arr[l]

  var lt = l

  var gt = r + 1

  var i = l + 1

  while (i < gt) {

    if (arr[i] < v) {

      ;[arr[i], arr[lt + 1]] = [arr[lt + 1], arr[i]]

      lt++

      i++

    } else if (arr[i] > v) {

      ;[arr[i], arr[gt - 1]] = [arr[gt - 1], arr[i]]

      gt--

    } else {

      i++

    }

  }

  ;[arr[l], arr[lt]] = [arr[lt], arr[l]]

  _quickSort3Ways(arr, l, lt - 1)

  _quickSort3Ways(arr, gt, r)

}

 

javascript
作者:张雪飞
出处:https://zhangxuefei.site/p/2222
版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

发表评论

电子邮件地址不会被公开。 必填项已用*标注