fezaoduke / fe-practice-hard

晚练课
69 stars 6 forks source link

第 31 期(ECMAScript-作用域 闭包):模拟ES6 Generator #34

Open wingmeng opened 5 years ago

wingmeng commented 5 years ago

题目:

请模拟实现 ES6 中的 Generator 函数

function generator(array) {
  // 你的代码
}

测试数据:

const arr = [
  {
    name: '张三',
    age: 18
  }, {
    name: '李四',
    age: 22
  }, {
    name: '王五',
    age: 30
  }
];

const it = generator(arr);

console.log(it.next());  // {value: {age: 18, name: "张三"}, done: false}
console.log(it.next());  // {value: {age: 22, name: "李四"}, done: false}
console.log(it.next());  // {value: {age: 30, name: "王五"}, done: false}
console.log(it.next());  // {value: undefined, done: true}

参考答案:

function generator(array) {
  let nextIndex = 0;

  return {
    next: function() {
      return nextIndex < array.length ?
      {value: array[nextIndex++], done: false} :
      {value: undefined, done: true};
    }
  }
}