实现 JavaScript 数组的逆序索引
在 Python 和 Matlab 里面,我们可以通过 arr[-1] 的方式访问数组的最后一位,如何赋予 JavaScript 这种能力呢?
// 实现一种新的数组特性,完成数组的逆序访问
const arr = [1,2,3]
arr[-1] = 3
arr[-2] = 2
arr[-3] = 1

最后更新于
在 Python 和 Matlab 里面,我们可以通过 arr[-1] 的方式访问数组的最后一位,如何赋予 JavaScript 这种能力呢?
// 实现一种新的数组特性,完成数组的逆序访问
const arr = [1,2,3]
arr[-1] = 3
arr[-2] = 2
arr[-3] = 1

最后更新于
// proxy 写法
const NewArrProxy = {
get (target, key, receiver) {
let idx = key < 0 ? target.length + Number(key): key
return Reflect.get(target, idx, receiver)
}
}
const arr = new Proxy([1,2,3], NewArrProxy)
console.log(arr[-1]) // 3
console.log(arr[-2]) // 2
console.log(arr[-3]) // 1// object.definePropery 写法
const arr = [1,2,3]
function newArrObserver(arr){
for (let idx = 1; idx <= arr.length; idx++) {
Object.defineProperty(arr, `-${idx}`, {
get() {
return arr[arr.length - idx]
}
})
}
}
newArrObserver(arr)
console.log(arr[-1]) // 3
console.log(arr[-2]) // 2
console.log(arr[-3]) // 1