在ES6中,可以通过Symbol.iterator方法使链表可迭代。迭代器是一种对象,它定义了一个无参数的next()方法,该方法返回一个具有value和done属性的对象。value属性表示当前迭代的值,done属性表示迭代是否结束。
要使链表可迭代,需要在链表的原型对象上实现Symbol.iterator方法。该方法返回一个迭代器对象,该对象包含一个next()方法。
下面是一个示例代码:
class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
class LinkedList {
constructor() {
this.head = null;
this.tail = null;
}
add(value) {
const newNode = new Node(value);
if (!this.head) {
this.head = newNode;
this.tail = newNode;
} else {
this.tail.next = newNode;
this.tail = newNode;
}
}
[Symbol.iterator]() {
let currentNode = this.head;
return {
next: () => {
if (currentNode) {
const value = currentNode.value;
currentNode = currentNode.next;
return { value, done: false };
} else {
return { done: true };
}
}
};
}
}
const list = new LinkedList();
list.add(1);
list.add(2);
list.add(3);
for (const item of list) {
console.log(item);
}
在上面的代码中,我们定义了一个Node类表示链表的节点,LinkedList类表示链表。在LinkedList类中,我们实现了add方法用于向链表中添加节点。在LinkedList类的原型对象上实现了Symbol.iterator方法,返回一个迭代器对象。迭代器对象的next()方法会依次返回链表中的节点值,直到链表结束。
这样,我们就可以使用for...of循环来迭代链表中的值。在每次迭代中,会依次输出1、2、3。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云