ÐолÑÑение ÑлеменÑа маÑÑива Ñ Ð¾ÑÑиÑаÑелÑной позиÑии
РнекоÑоÑÑÑ ÑзÑÐºÐ°Ñ Ð¿ÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ полÑÑаÑÑ ÑлеменÑÑ Ð¼Ð°ÑÑива, иÑполÑзÑÑ Ð¾ÑÑиÑаÑелÑнÑе индекÑÑ, оÑÑÑиÑÑваемÑе Ñ ÐºÐ¾Ð½Ñа.
ÐÐ¾Ñ Ñак:
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