.... и обновлять его при изменении его позиции
Это хитрый бит, вам нужно либо обернуть прокси вокруг массива и обновить позиции, когда все будет изменить:
let array = [{position: 0},{position: 1},{position: 2}];
function updateIndexes(array) {
array.forEach((entry, index) => {
entry.position = index;
});
}
let parray = new Proxy(array, {
defineProperty(target, key, descriptor) {
const result = Reflect.defineProperty(target, key, descriptor);
updateIndexes(target);
return result;
},
set(target, key, value) {
const result = Reflect.set(target, key, value);
updateIndexes(target);
return result;
}
});
let second = parray[1];
console.log(second.position); // 1
parray.splice(0, 1);
console.log(second.position); // 0
... или сделайте свойство position
аксессором, которое ищет объект в массиве и возвращает его текущую позицию, что означает создание аксессора там, где он закрывается массив:
let array = [
{
get position() {
return array.indexOf(this);
}
},
{
get position() {
return array.indexOf(this);
}
},
{
get position() {
return array.indexOf(this);
}
}
];
let second = array[1];
console.log(second.position); // 1
array.splice(0, 1);
console.log(second.position); // 0