Skip to content

Instantly share code, notes, and snippets.

@codeAdrian
Created May 2, 2023 09:02
Show Gist options
  • Save codeAdrian/429d64c96aadd003c372fa8e667f84f4 to your computer and use it in GitHub Desktop.
Save codeAdrian/429d64c96aadd003c372fa8e667f84f4 to your computer and use it in GitHub Desktop.
/* UTILS */
const getAverageScore = (score) =>
score.length ? score.reduce((acc, point) => acc + point) / score.length : 0;
/* PROXY */
const handleSet = (obj, prop, value) => {
const isNumber = !isNaN(parseInt(prop));
if (isNumber) {
const index = parseInt(prop);
console.log(index);
if (index >= 10) {
throw new RangeError("Array limit reached");
}
Reflect.set(obj, prop, value);
}
Reflect.set(obj, prop, value);
return true;
};
const handleGet = (obj, prop) => {
if (prop === "average") {
return getAverageScore(obj);
}
if (prop in obj) {
return Reflect.get(obj, prop);
}
};
const createArrayProxy = (arr) => {
const proxy = new Proxy(arr, {
set: handleSet,
get: handleGet
});
return proxy;
};
/* INIT */
let arr = createArrayProxy([]);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment