ÐоÑÑÑп до маÑивÑ[-1]
У деÑÐºÐ¸Ñ Ð¼Ð¾Ð²Ð°Ñ Ð¿ÑогÑамÑÐ²Ð°Ð½Ð½Ñ Ð¼Ð¸ можемо оÑÑимаÑи доÑÑÑп до елеменÑÑв маÑÐ¸Ð²Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð½ÐµÐ³Ð°ÑÐ¸Ð²Ð½Ð¸Ñ ÑндекÑÑв, вÑдÑÐ°Ñ Ð¾Ð²Ð°Ð½Ð¸Ñ Ð· кÑнÑÑ.
ÐапÑиклад оÑÑ Ñак:
let array = [1, 2, 3];
array[-1]; // 3, оÑÑаннÑй елеменÑ
array[-2]; // 2, за кÑок вÑд кÑнÑÑ
array[-3]; // 1, за два кÑоки вÑд кÑнÑÑ
ÐнÑими Ñловами, array[-N] Ñе Ñе Ñаме, Ñо array[array.length - N].
СÑвоÑÑÑÑ Ð¿ÑокÑÑ Ð´Ð»Ñ ÑеалÑзаÑÑÑ ÑÐ°ÐºÐ¾Ñ Ð¿Ð¾Ð²ÐµÐ´Ñнки.
ÐÑÑ Ñк Ñе Ð¼Ð°Ñ Ð¿ÑаÑÑваÑи:
let array = [1, 2, 3];
array = new Proxy(array, {
/* Ð²Ð°Ñ ÐºÐ¾Ð´ */
});
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