JavaScript 中的循环缓冲区 [英] Circular buffer in JavaScript

查看:32
本文介绍了JavaScript 中的循环缓冲区的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人已经在 J​​avaScript 中实现了循环缓冲区吗?如果没有指针,你会怎么做?

Has anyone already implemented a circular buffer in JavaScript? How would you do that without having pointers?

推荐答案

奇怪的巧合,我今天早些时候刚写了一个!我不知道您的具体要求是什么,但这可能有用.

Strange co-incidence, I just wrote one earlier today! I don't know what exactly your requirements are but this might be of use.

它提供了一个类似无限长度数组的界面,但忘记"了旧项目:

It presents an interface like an Array of unlimited length, but ‘forgets’ old items:

// Circular buffer storage. Externally-apparent 'length' increases indefinitely
// while any items with indexes below length-n will be forgotten (undefined
// will be returned if you try to get them, trying to set is an exception).
// n represents the initial length of the array, not a maximum
function CircularBuffer(n) {
    this._array= new Array(n);
    this.length= 0;
}
CircularBuffer.prototype.toString= function() {
    return '[object CircularBuffer('+this._array.length+') length '+this.length+']';
};
CircularBuffer.prototype.get= function(i) {
    if (i<0 || i<this.length-this._array.length)
        return undefined;
    return this._array[i%this._array.length];
};
CircularBuffer.prototype.set= function(i, v) {
    if (i<0 || i<this.length-this._array.length)
        throw CircularBuffer.IndexError;
    while (i>this.length) {
        this._array[this.length%this._array.length]= undefined;
        this.length++;
    }
    this._array[i%this._array.length]= v;
    if (i==this.length)
        this.length++;
};
CircularBuffer.IndexError= {};

这篇关于JavaScript 中的循环缓冲区的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆