如何跳出 reduce 循环

方案 1:设置条件(flag)

const arr = [0, 1, 2, 3, 4]
const sum = arr.reduce((prev, curr, index, currArr) => {
    if (index >= 4) {
        return prev
    } else {
        prev += curr
        return prev
    }

}, 0)
console.log(sum) // 6

方案 2:循环过程中修改原始数组

const arr = [0, 1, 2, 3, 4]
const sum = arr.reduce((prev, curr, index, currArr) => {
    prev += curr
    if (curr === 3) currArr.length = 0
    return prev
}, 0)
console.log(sum) // 6

"如何跳出 reduce 循环"继续阅读

讲讲 Promise/实战

一、什么是 Promise

1.1 Promise 的前世今生

Promise 最早出现在 1988 年,由 Barbara LiskovLiuba Shrira 首创(论文:Promises: Linguistic Support for Efficient Asynchronous Procedure Calls in Distributed Systems)。并且在语言 MultiLispConcurrent Prolog 中已经有了类似的实现。

JavaScript 中,Promise 的流行是得益于 jQuery 的方法 jQuery.Deferred(),其他也有一些更精简独立的 Promise 库,例如:QWhenBluebird

"讲讲 Promise/实战"继续阅读

迭代器(Iterator)和生成器(Generation)

一、用生成器给对象定义迭代器

常规方法

const obj = {
  a: 1,
  b: 2,
  c: 3,
  [Symbol.iterator]() {
    let [index, values] = [0, Object.values(this)]
    return {
      next() {
        const done = (index >= values.length)
        const value = done ? undefined : values[index++]
        return {
          done,
          value
        }
      }
    }
  }
}
for (let v of obj) {
  console.log(v) // 1 2 3
}

"迭代器(Iterator)和生成器(Generation)"继续阅读