レッスンに戻る

Accessing array[-1]

プログラム言語によっては、負の値を使って配列要素にアクセスすることが可能で、この場合は末尾から数えられます。

このようになります。

let array = [1, 2, 3];

array[-1]; // 3, 最後の要素
array[-2]; // 2, 最後から1つ前
array[-3]; // 1, 最後から2つ前

つまり、array[-N]array[array.length - N] と同じです。

この挙動を実装するプロキシを作成しましょう。

次のように動作します:

let array = [1, 2, 3];

array = new Proxy(array, {
  /* your code */
});

alert( array[-1] ); // 3
alert( array[-2] ); // 2

// 他の配列の機能は "そのまま" 動作すべきです
let array = [1, 2, 3];

array = new Proxy(array, {
  get(target, prop, receiver) {
    if (prop < 0) {
      // arr[1] のようにアクセスしても
      // prop は文字列なので、数値に変換する必要があります
      prop = +prop + target.length;
    }
    return Reflect.get(target, prop, receiver);
  }
});


alert(array[-1]); // 3
alert(array[-2]); // 2