<div dir="ltr">Hit send too soon, please ignore.<div class="gmail_extra"><br><div class="gmail_quote">On Wed, Mar 25, 2015 at 9:08 AM, Bob Myers <span dir="ltr"><<a href="mailto:rtm@gol.com" target="_blank">rtm@gol.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Thanks Rick. Yes, I was hoping to make the following work:<div><br></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px">x = {a: 1}; </span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px">y = {b: 2};</span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px">z = {x.a, b.y}; // {a: 1, b: 2}</span><br></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px">This is not destructuring, it's an extension to </span><font color="#000000"><span style="font-size:12.8000001907349px">object literal property value shorthand.</span></font></div><div><font color="#000000"><span style="font-size:12.8000001907349px">The idea is to derive the desired property name `a` from `x.a`.</span></font></div><div><font color="#000000"><span style="font-size:12.8000001907349px">However, it could be difficult to define when and how a property name could be derived from various types of member expressions. </span></font></div><div><font color="#000000"><span style="font-size:12.8000001907349px"><br></span></font></div><div><font color="#000000"><span style="font-size:12.8000001907349px">Here is an alternative, admittedly not too pretty, but perhaps easier to define and/or implement. The idea is to generalize the permissible properties for which values can be omitted/inferred, and also allow LHS destructuring-type syntax, so:</span></font></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px"><font face="monospace, monospace">x = {a: 1};</font></span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px"><font face="monospace, monospace">y = {b: 2};</font></span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px">If I want to extract the two values using destructuring assignment today we can do:</span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px">var { x: {a}, y: {b} } = { x, y }; // a=1, b=2</span><br></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px">Consider using the LHS destructuring syntax in the above as an expanded shorthand property:</span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px">z = { </span><span style="color:rgb(0,0,0);font-size:12.8000001907349px"><b><font face="monospace, monospace">{ x: {a}, y: {b} }</font></b> </span><span style="color:rgb(0,0,0);font-size:12.8000001907349px">} // </span><span style="color:rgb(0,0,0);font-size:12.8000001907349px"> </span><span style="color:rgb(0,0,0);font-size:12.8000001907349px">// {a: 1, b: 2}</span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px">This kind of re-use of destructuring syntax would permit "renaming" "on-the-fly":</span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px"><br></span></div><div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px">z = { </span><span style="color:rgb(0,0,0);font-size:12.8000001907349px">{ x: {a: A}, y: {b: B} } </span><span style="color:rgb(0,0,0);font-size:12.8000001907349px">} // </span><span style="color:rgb(0,0,0);font-size:12.8000001907349px"> </span><span style="color:rgb(0,0,0);font-size:12.8000001907349px">// {A: 1, B: 2}</span></div></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px">Or pulling things from arrays:</span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px">q = [1, 2, 3];</span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px">z = { { x: a, } }</span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px">erty" would be conceptually destructured into </span><br></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px"><br></span></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px">{ x: {a}, y: {b} }</span></div><div><font color="#000000"><span style="font-size:12.8000001907349px"><br></span></font></div><div><font color="#000000"><span style="font-size:12.8000001907349px">z = { x: {a}, y: </span></font></div><div><span style="color:rgb(0,0,0);font-size:12.8000001907349px"><br></span></div><div><br></div></div></blockquote></div></div></div>