字节面试的一个题目,没想出来,求助

// 实现一个类,传入二维数组,调用next方法依次输出数组的值

class makeIterator{}
let arr =[[1,4,7],[2,9],[8,7,6,3]]
let m = makeIterator(arr);
m.next();//1
m.next();//4
// 依次类推
#字节面试#
全部评论
想用 generator 的话将 next 函数改改就行,建议去看看 ES6 的 iterator 和 generator
点赞 回复 分享
发布于 2022-05-12 20:56
下面这样也可以,不用 this ,用 iterator 就可以 class makeIterator {   constructor(arr) {     arr[Symbol.iterator] = function () {       let i = 0, j = 0;       return {         next () {           if (i >= arr.length) return { value: undefined, done: true };           let value = arr[i][j];           j++;           if (j >= arr[i].length) {             i++;             j = 0;           }           return {             value,             done: false           };         }       }     }     this.iterator = arr[Symbol.iterator]();   }   next () {     return this.iterator.next().value   } } let m = new makeIterator([[1, 4, 7], [2, 9], [8, 7, 6, 3]]); console.log(m.next()); console.log(m.next()); console.log(m.next()); console.log(m.next()); console.log(m.next()); console.log(m.next()); console.log(m.next()); console.log(m.next());
点赞 回复 分享
发布于 2022-05-12 20:56
class makeIterator {   constructor(arr) {     this.arr = arr     this.i = 0;     this.j = 0;   }   next() {     if(this.i >= this.arr.length)   return undefined     let ans = this.arr[this.i][this.j];     this.j++;     if(this.j >= this.arr[this.i].length) {       this.i++;       this.j = 0;     }     return ans;   } } let m = new makeIterator([[1, 4, 7],[2, 9],[8, 7, 6, 3]]); console.log(m.next()); console.log(m.next());
点赞 回复 分享
发布于 2022-05-12 20:48
里面维护一个行号跟列号,next一次列号+1,列号到了最大值时置0,并且行号+1。最后加个最大行号列号的判断即可。
点赞 回复 分享
发布于 2022-05-12 13:39

相关推荐

评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务