Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #19605
| 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
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