Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.javascript > #19605

Re: About keeping my array 1 based after having sorted it

Path csiph.com!usenet.pasdenom.info!dedibox.gegeweb.org!gegeweb.eu!nntpfeed.proxad.net!proxad.net!feeder2-2.proxad.net!newsfeed.arcor.de!newsspool4.arcor-online.net!news.arcor.de.POSTED!not-for-mail
Content-Type text/plain; charset="UTF-8"
Message-ID <12786665.ZbpLptdNGN@PointedEars.de> (permalink)
From Thomas 'PointedEars' Lahn <PointedEars@web.de>
Reply-To Thomas 'PointedEars' Lahn <usenet@PointedEars.de>
Organization PointedEars Software (PES)
Date Fri, 03 May 2013 01:26:51 +0200
User-Agent KNode/4.8.5
Content-Transfer-Encoding 8Bit
X-Face %i>XG-yXR'\"2P/C_aO%~;2o~?g0pPKmbOw^=NT`tprDEf++D.m7"}HW6.#=U:?2GGctkL,f89@H46O$ASoW&?s}.k+&.<b';Md8`dH6iqhT)6C^.Px|[=M@7=Ik[_w<%n1Up"LPQNu2m8|L!/3iby{-]A+#YE}Kl{Cw$\U!kD%K}\2jz"QQP6Uqr],./"?;=4v
Face iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAGFBMVEXTxa4RFk5dUWANED8PFEfy7+MGBiW+n3ZNF/QuAAACaElEQVQ4jVXUwVOcMBQG8Dc7Rc4PUntdWV2uxjDpGaGeozOp1woar4jd5t/v9wLstMwsA/ntlxdCAgUc1hjTc9/JCZfGoo3wG3HdmdAWrIJRHe7GM/TmpY5VFefuVcAkkPbLIaN8rmPmjloyZxgyR3GuJ4K0AGtJ2htz8o7yqikm759fldQXaMpbDzjKAG+8v+AugVTOPO5DOjLvGtUYQwh0CPjnVMyGd+8/GfUB5nLKJDD2aLDh5HYyMDJGDwQIo2ZmZcKbowNmAdB/AzyFhrmF2MHRb0QJJfaAnwGB6orZhoykLzJtGwF/xpYxI1dswomiUj3gTuAIqCn/4C7cULwGNBtwMTk3Y4LfKB5YUaOKBKYtpplm7u0vip8tU1NWWyI/7XdcSuIDoMt6rVHMWT0DbjHPGqDqZVSa6zleLcUTcIKLoMv3ueJluALtAo9B302zPPlrtiVScRdCjXvVh3e3JpYa/jjkuC9N+LrBMlz/eAN4eQijX2EdLo6c5tGGHwLyHFtXk89dDGHwCVhG9T0S/j55AhRZgkMCmUQXJ49TnS1wnQDvw0eAh9ICeMmEFbCnPMFzjAvsWoEWEFdYEx+S0MoUZ1gT1wId8+AF3Bl2OoEu906AUHx5VLw/gXYg/x84loOah/2UYNrgiwSwGO7RfUzVBbx/kgpckumGOi6QirtD6gkLTitbnxNol47S2jVc2vsN5kPqaAHT8uUdAJM4v/DanjYOwmUjWznGfwB7sGtAtor5BgofDuzaRj4kSQAqDakTsKORa3Q3xKi3gE1fhl71KRMqrdZ2AWNNg/YOhQyrVBnb+i+nEg4bsDA+egAAAABJRU5ErkJggg==
Subject Re: About keeping my array 1 based after having sorted it
Newsgroups comp.lang.javascript
References <klrbhd$duk$1@dont-email.me> <c0affca3-9adb-40c0-bcdd-3222defbd338@a8g2000yqp.googlegroups.com>
MIME-Version 1.0
Lines 83
NNTP-Posting-Date 03 May 2013 01:26:53 CEST
NNTP-Posting-Host 97180055.newsspool1.arcor-online.net
X-Trace DXC=N81@XO:S0[FAa;:RKVJ>LEic==]BZ:afN4Fo<]lROoRAnkgeX?EC@@@PmZQ?n;CHJEDZm8W4\YJNLb@mF9jNikdEBoKGPB=12AGMLI;EJO37HC
X-Complaints-To usenet-abuse@arcor.de
Xref csiph.com comp.lang.javascript:19605

Show key headers only | View raw


Scott Sauyet wrote:

> You can probably achieve the same thing with this:
> 
>     bookingArray.sort(function(a, b) {
>       return a.Objectid < b.Objectid ? -1 :
>              a.Objectid > b.Objectid ? +1 :
>              new Date(a.Fromtime) - new Date(b.Fromtime);

(The “+” in “+1” is a superfluous conversion operation; it is *not* a no-op.  
Also, few people know that “-1” actually is a “unary -” conversion operation 
on the primitive Number value 1.  See ES 5.1, §§ 11.4.6 and 11.4.7.)

Please do not write or suggest such code; it is a maintenance nightmare.  
Write such code if you want your colleagues to dislike you for it, put 
politely.  See also: <http://stackoverflow.com/q/14693135/855543>

The least you should do is using parentheses to group the expressions to 
make it easier to read and to debug, for example (preferred by me)

      return (a.Objectid < b.Objectid
        ? -1
        : (a.Objectid > b.Objectid
            ? 1
            : new Date(a.Fromtime) - new Date(b.Fromtime)));

or (preferred by others)

      return (a.Objectid < b.Objectid)
        ? -1
        : (a.Objectid > b.Objectid)
            ? 1
            : new Date(a.Fromtime) - new Date(b.Fromtime);

As the conversion to Date appears to be superfluous here¹, there is also 

  var comparator = jsx.array.getComparator(
    ["Objectid", "Fromtime"], {numeric: true});

  bookingArray.sort(comparator);

(see 
<http://PointedEars.de/websvn/filedetails.php?repname=JSX&path=/trunk/array.js>)

The least you should do is cache the comparator.

>     });
> 
> And if the Objectid properties are numeric, you can get even simpler:
> 
> 
>     bookingArray.sort(function(a, b) {
>       return a.Objectid - b.Objectid ||
>              new Date(a.Fromtime) - new Date(b.Fromtime);
>     });

Again, indicating the operator precedence is a good idea:

    bookingArray.sort(function (a, b) {
      return (a.Objectid - b.Objectid)
        || (new Date(a.Fromtime) - new Date(b.Fromtime));
    });

or (more efficient here)

    bookingArray.sort(function (a, b) {
      return (a.Objectid - b.Objectid) || (a.Fromtime - b.Fromtime);
    });

It should also be noted that using the “||” operator carries with it the 
internal conversion of the first operand to Boolean which may be more 
expensive than other approaches.

______
¹  However, this gives me the idea that it could be useful that
   jsx.array.getComparator() could also be passed a callback or constructor
   for each key, or all keys, whose return value would be used as operand
   in the comparison.  What do you think?
-- 
PointedEars

Twitter: @PointedEars2
Please do not Cc: me. / Bitte keine Kopien per E-Mail.

Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

About keeping my array 1 based after having sorted it "Tony" <tony.johansson@inport.com> - 2013-05-01 17:18 +0200
  Re: About keeping my array 1 based after having sorted it Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2013-05-01 08:26 -0700
    Re: About keeping my array 1 based after having sorted it "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2013-05-01 19:43 +0200
      Re: About keeping my array 1 based after having sorted it Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2013-05-01 15:15 -0700
        Re: About keeping my array 1 based after having sorted it "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2013-05-02 09:35 +0200
          Re: About keeping my array 1 based after having sorted it Denis McMahon <denismfmcmahon@gmail.com> - 2013-05-02 14:31 +0000
      Re: About keeping my array 1 based after having sorted it Denis McMahon <denismfmcmahon@gmail.com> - 2013-05-01 22:12 +0000
        Re: About keeping my array 1 based after having sorted it "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2013-05-02 09:36 +0200
  Re: About keeping my array 1 based after having sorted it Scott Sauyet <scott.sauyet@gmail.com> - 2013-05-02 08:52 -0700
    Re: About keeping my array 1 based after having sorted it Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-05-03 01:26 +0200
      Re: About keeping my array 1 based after having sorted it Scott Sauyet <scott.sauyet@gmail.com> - 2013-05-03 08:53 -0700
        Re: About keeping my array 1 based after having sorted it Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-05-03 18:39 +0200
          Re: About keeping my array 1 based after having sorted it Scott Sauyet <scott.sauyet@gmail.com> - 2013-05-03 11:00 -0700
            Sorting arrays of objects (was: About keeping my array 1 based after having sorted it) Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-05-05 01:00 +0200
              Re: Sorting arrays of objects (was: About keeping my array 1 based after having sorted it) Scott Sauyet <scott.sauyet@gmail.com> - 2013-05-05 08:53 -0700
        Re: About keeping my array 1 based after having sorted it Dr J R Stockton <reply1300@merlyn.demon.co.uk.invalid> - 2013-05-04 16:14 +0100

csiph-web