2013-08-30 2 views
0

Есть ли способ уменьшить этот код, чтобы сделать то же самое, но с 100 символами меньше?Код двойной очереди должен быть уменьшен

Это простая двойная очередь, которая имеет pushHead, popHead, pushTail, popTail, а также способ доступа к длине и isEmpty.

var makeDeque = function() 
{ 
    var a= []; 
    this.length= a.length=0; 

    this.pushHead=function(v) 
    { 
     a.unshift(v); 
    } 
    this.popHead=function() 
    { 
     return a.shift(); 
    } 

    this.pushTail=function(v) 
    { 
     a.push(v); 
    } 

    this.popTail=function() 
    { 
    return a.pop(); 
    } 

    this.isEmpty=function() 
    { 
     return a.length===0; 
    } 

    return this; 
}; 

Спасибо!

+0

Посмотрите на http://stackoverflow.com/questions/18544265/pointers-and-array-class-in-javascript/18544420#18544420 – plalx

ответ

0

Вы можете избавиться от ручной обработки массива. Я думаю, вы не можете получить меньше этого (вы могли бы сократить имена переменных, но код, вероятно, должен быть, по крайней мере, таким долго).

function Deque() {} 
Deque.prototype = new Array(); 
var prot = Deque.prototype; 
prot.pushHead = Deque.prototype.unshift; 
prot.popHead = Deque.prototype.shift; 
prot.pushTail = Deque.prototype.push 
prot.popTail = Deque.prototype.pop 
prot.isEmpty = function() {return this.length == 0} 

Таким образом, вы также получите всю функциональность по умолчанию Arrays, а также. Deque в этом примере эффективно подкласс класса Array.