js 实现游标
使用 JavaScript 实现游标
在 JavaScript 中,游标通常用于遍历数据集合或数据库查询结果。以下是几种常见的实现方式:
使用数组游标
通过维护一个索引变量来模拟游标行为:
const data = [1, 2, 3, 4, 5];
let cursor = 0;
function next() {
return cursor < data.length ? data[cursor++] : null;
}
// 使用示例
console.log(next()); // 1
console.log(next()); // 2
使用生成器函数
ES6 的生成器函数可以更方便地实现游标:
function* createCursor(data) {
for (const item of data) {
yield item;
}
}
const cursor = createCursor([1, 2, 3]);
console.log(cursor.next().value); // 1
console.log(cursor.next().value); // 2
使用 IndexedDB 游标
在浏览器中使用 IndexedDB 数据库时,可以直接使用其游标 API:
const request = indexedDB.open('myDatabase');
request.onsuccess = function(event) {
const db = event.target.result;
const transaction = db.transaction('myStore', 'readonly');
const store = transaction.objectStore('myStore');
const cursorRequest = store.openCursor();
cursorRequest.onsuccess = function(e) {
const cursor = e.target.result;
if (cursor) {
console.log(cursor.value);
cursor.continue();
}
};
};
使用 MongoDB 风格游标
在 Node.js 中与 MongoDB 交互时,可以使用其游标 API:
const { MongoClient } = require('mongodb');
async function run() {
const client = await MongoClient.connect('mongodb://localhost:27017');
const collection = client.db('test').collection('items');
const cursor = collection.find({});
while (await cursor.hasNext()) {
const doc = await cursor.next();
console.log(doc);
}
}
run();
自定义可迭代游标
实现一个符合迭代器协议的自定义游标:

class Cursor {
constructor(data) {
this.data = data;
this.index = 0;
}
[Symbol.iterator]() {
return this;
}
next() {
return this.index < this.data.length
? { value: this.data[this.index++], done: false }
: { done: true };
}
}
const cursor = new Cursor([1, 2, 3]);
for (const item of cursor) {
console.log(item); // 1, 2, 3
}
每种实现方式适用于不同的场景,数组游标和生成器适合内存中的数据遍历,IndexedDB 和 MongoDB 游标用于数据库操作,自定义迭代器提供了更灵活的控制。






