

配列の先頭に値を追加していくプログラムがあります。

これはどんどん増えていくので数を10個に制限したいのですが、やり方がわかりません。

どうしたらよいのでしょうか。

[code]

    a = [1]
    a.unshift(2) // [2, 1]
    ...
    a.unshift(10) // [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
    a.unshift(11) // [11, 10, 9, 8, 7, 6, 5, 4, 3, 2]
    
[/code]

`unshift()`の直後に配列を10個取り出して自己代入できればよいのですが、、、


CC BY-SA 3.0
2015-04-27T11:27:31.290
9601
2015-05-26T00:37:58.573
9149
question
javascript
javascriptで配列の数を制限したい


下記の[`splice`](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/splice)でのやり方はいかがでしょうか？

[code]

    function addLimited(array, value, limit) {
      array.unshift(value);
      array.splice(limit);
    }
    
    var array = [];
    
    addLimited(array, 1, 10);
    addLimited(array, 2, 10);
    addLimited(array, 3, 10);
    addLimited(array, 4, 10);
    addLimited(array, 5, 10);
    addLimited(array, 6, 10);
    addLimited(array, 7, 10);
    addLimited(array, 8, 10);
    addLimited(array, 9, 10);
    addLimited(array, 10, 10);
    addLimited(array, 11, 10);
    
    console.log(array); // [11, 10, 9, 8, 7, 6, 5, 4, 3, 2]
[/code]


CC BY-SA 3.0
2015-04-27T11:32:31.667
9604
2015-04-27T11:38:45.877
2015-04-27T11:38:45.877
3371
3371
9601
answer


少し強引ですが、unshiftを書き換えることで実現することもできます。

[code]

    // 配列を拡張したtenAryオブジェクトを作成
    var tenAry = {};
    tenAry.__proto__ = [];
    tenAry._unshift = tenAry.unshift
    tenAry.unshift = function(v){
        this._unshift(v);
        this.splice(10);
    }
    
    // 20回unshiftする
    for(var i=0; i<20; i++){
      tenAry.unshift(i);
    }
    
    console.log(tenAry); // -> [19, 18, 17, 16, 15, 14, 13, 12, 11, 10]
    
[/code]

`new Array()`するような感覚で実装したい場合は以下のようにすると良いです。

[code]

    // TenArrayクラスのようなものを作成
    function TenArray(){}
    TenArray.prototype.__proto__ = []
    TenArray.prototype.unshift = function(v){
        this.__proto__.__proto__.unshift.call(this, v);
        this.splice(10);
    };
    
    // 通常の配列を作成
    var ary = new Array();
    
    // unshiftで最大素数数が10個に制限されている配列を作成
    var tenAry = new TenArray();
    
[/code]


CC BY-SA 3.0
2015-04-27T18:59:58.803
9617
2015-04-27T21:00:08.877
2015-04-27T21:00:08.877
8351
8351
9601
answer


a.lengthを、制限したい数に変更します。

[code]

    var a= [1,2,3,4,5,6,7,8,9,10,11];
    a.length= 10; // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    a.unshift(12); // [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    a.length= 10; // [12, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    var a=[];
    a.length= 10; // [undefined × 10]
    
[/code]


CC BY-SA 3.0
2015-05-26T00:37:58.573
10621
2015-05-26T00:37:58.573
9834
9601
answer