const regSlice = /^\d+(,\d+){0,2}$/;
function proxedArray(array) {
return new Proxy(array, {
get: (obj, key) => {
if (typeof key == "string") {
//console.log(key); 0,9,2
if (regSlice.test(key)) {
let [start, stop, step] = key.split(',').map((v)=>parseInt(v));
stop = (stop != undefined)? stop : start + 1;
step = (step != undefined)? step : 1;
let c= step-1;
return obj.slice(start, stop).filter((e,i)=> ((c<step)?c++:c=1, c%step==0));
}
}
return obj[key];
}
});
}
const a = proxedArray([1,2,3,4,5,6,7,8,9,10]);
console.log(a[[0, 9, 2]]);
Y29uc3QgcmVnU2xpY2UgPSAvXlxkKygsXGQrKXswLDJ9JC87CgpmdW5jdGlvbiBwcm94ZWRBcnJheShhcnJheSkgewogIHJldHVybiBuZXcgUHJveHkoYXJyYXksIHsKICAgIGdldDogKG9iaiwga2V5KSA9PiB7CiAgICAgIGlmICh0eXBlb2Yga2V5ID09ICJzdHJpbmciKSB7CiAgICAgICAgLy9jb25zb2xlLmxvZyhrZXkpOyAgIDAsOSwyCiAgICAgICAgaWYgKHJlZ1NsaWNlLnRlc3Qoa2V5KSkgeyAgCiAgICAgICAgICBsZXQgW3N0YXJ0LCBzdG9wLCBzdGVwXSA9IGtleS5zcGxpdCgnLCcpLm1hcCgodik9PnBhcnNlSW50KHYpKTsKICAgICAgICAgIHN0b3AgPSAoc3RvcCAhPSB1bmRlZmluZWQpPyBzdG9wIDogc3RhcnQgKyAxOwogICAgICAgICAgc3RlcCA9IChzdGVwICE9IHVuZGVmaW5lZCk/IHN0ZXAgOiAxOwogICAgICAgICAgbGV0IGM9IHN0ZXAtMTsgICAgICAgICAgCiAgICAgICAgICByZXR1cm4gb2JqLnNsaWNlKHN0YXJ0LCBzdG9wKS5maWx0ZXIoKGUsaSk9PiAoKGM8c3RlcCk/YysrOmM9MSwgYyVzdGVwPT0wKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBvYmpba2V5XTsKICAgIH0KICB9KTsKfQoKY29uc3QgYSA9IHByb3hlZEFycmF5KFsxLDIsMyw0LDUsNiw3LDgsOSwxMF0pOwoKY29uc29sZS5sb2coYVtbMCwgOSwgMl1dKTs=