js-challenges icon indicating copy to clipboard operation
js-challenges copied to clipboard

手写用 ES6proxy 如何实现 arr[-1] 的访问(滴滴2020)

Open Sunny-117 opened this issue 3 years ago • 5 comments

Sunny-117 avatar Nov 03 '22 08:11 Sunny-117

let arr= [1,2,3,4]
let proxy = new Proxy(arr,{
  get(target,key){
    if(key<0){
      return target[target.length+parseInt(key)]
    }
    return target[key] 
  }
})
console.log(proxy[-2]);
console.log(proxy[2]);

CXGBro avatar Dec 24 '22 10:12 CXGBro

        let a = [1, 2, 3];
        let proxy = new Proxy(a, {
            get(target, key) {
                if (key === "-1") {
                    return target[target.length - 1];
                }
            },
        });
        console.log(proxy[-1]);

cscty avatar Jul 04 '23 17:07 cscty

let arr = [1, 2, 3, 4]
let proxy = new Proxy(arr, {
    get(target, key) {
        if (key < 0) {
            return target[target.length + parseInt(key)]
        }
        return target[key]
    }
})
// 测试
console.log(proxy[-1]);

mafeiGitHub avatar Oct 16 '23 08:10 mafeiGitHub

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];

function observe(arr) {
  const proxy = new Proxy(arr, {
    get(target, key) {
      let v = target[key];
      if (typeof v === "object") {
        observe(v);
      }
      if (key < 0) {
        let len = target.length;
        key = len - -key;
      }
      return target[key];
    },
  });
  return proxy;
}

const arr2 = observe(arr);
console.log(arr2[-4]);

dizao006 avatar Oct 06 '24 09:10 dizao006

const arrProxy = (arr, index) => {
  let proxy = new Proxy(arr, {
    get: (target, key) => {
      if(key < 0) {
        return target[target.length - key*-1];
      }
      return target[key];
    }
  })

  return proxy[index];
}

var a = [1, 2, 3, 4, 5];
console.log(arrProxy(a, -1));

Windseek avatar Nov 12 '24 11:11 Windseek