 <p>Is using proxies a hard requirement? I wouldn't recommend proxies for general programming tasks as you can end up with unpredictable and hard-to-spot side effects.</p> <p>If you keep to data and functions to transform it, avoiding mutable state where possible, I think you'll end up with simpler code that's easier to maintain.</p> <p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code"> <pre class="snippet-code-js lang-js prettyprint-override"><code>var activities = ['reading', 'swimming']; var sfilter = function(activities){ return activities.filter(function(v){ return v[0] === 's'; }); }; console.log(sfilter(activities)); var memap = function(activities){ return activities.map(function(v){ return 'I am ' + v; }); }; console.log(memap(activities)); activities.push('smiling'); console.log(sfilter(activities)); console.log(memap(activities)); // Yes, I know this doesn't work in quite the same way, // but you're asking for trouble here since in your // code you're appending to one list, but overwriting // an element in the other. activities[1] = 'snoopying'; console.log(sfilter(activities)); console.log(memap(activities));</code></pre> </div> </div> </p> <p>Stick to a Single Source of Truth and observe that. With each copy you are multiplying state complexity. That will make debugging, testing, and extending the code difficult.</p>