Path: csiph.com!aioe.org!news.mb-net.net!open-news-network.org!.POSTED.50.236.197.178.dynamic.wless.lssmb00p-cgnat.res.cust.swisscom.ch!not-for-mail From: Thomas 'PointedEars' Lahn Newsgroups: comp.lang.javascript Subject: Re: Referencing an object prop with a string Date: Wed, 03 Feb 2021 19:42:44 +0100 Organization: PointedEars Software (PES) Lines: 106 Message-ID: <2637940.BEx9A2HvPv@PointedEars.de> References: <5793bf43-6506-4351-bdca-3d59d740c5e5n@googlegroups.com> <806120824.0ifERbkFSE@PointedEars.de> <2081055.NgBsaNRSFp@PointedEars.de> Reply-To: Thomas 'PointedEars' Lahn Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8Bit Injection-Info: gwaiyur.mb-net.net; posting-host="50.236.197.178.dynamic.wless.lssmb00p-cgnat.res.cust.swisscom.ch:178.197.236.50"; logging-data="16943"; mail-complaints-to="abuse@open-news-network.org" User-Agent: KNode/4.14.10 Cancel-Lock: sha1:cJn7sfVMG1YBCdNaScoHzVsiXfo= 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== X-Face: %i>XG-yXR'\"2P/C_aO%~;2o~?g0pPKmbOw^=NT`tprDEf++D.m7"}HW6.#=U:?2GGctkL,f89@H46O$ASoW&?s}.k+&. […] Thomas 'PointedEars' Lahn wrote: >> Michael Haufe (TNO) wrote: >> > I wonder if a variant of JSONPath could be promoted into the language >> > proper. >> Yes, I am not particularly fond of Stefan Goessners syntax choices >> either. While I could perhaps live with “@” instead of “.”, coming from >> the command shell I find “..” to access *subordered* items very >> counter-intuitive (I also did with E4X). Why did he not propose and >> implement the familiar XPath syntax? For example, I see no good reason to >> propose ”$” instead of “/”. > > I don't think either could be used: > > '$' is a variable name already so that could not become a reserved work ISTM that he defined “$” to only signify the root element if it occurred as first character in the path. > '/' could be used as a prefix operator but with the existence of > multi-line comments: '/* ... */' > single line comments: '// ...' > and '/' as an infix division I think that would be hard to sell. We are talking about literals here. > Additionally, if '/' is used as the root, it seems to want '//' as the > descendant selector like xpath. This would conflict with single line > comments. See above. > Maybe '#' as root? That’s even worse than “@” :-D “@” I can at least associate with “here”. >> One problem I see is that there is not really a need for it anymore (or >> is there?): You can write now (and at least *execute* much more >> efficiently) >> >> obj?.store?.book?.filter((book) => book.price < 10) >> .map((book) => book.title) || [] >> >> instead of >> >> jsonPath(obj, '$.store.book[?(@.price < 10)].title') >> >> Which reminds me of LINQ which solves similar problems. > > I think a descendent operator/method is the primary missing feature. > > obj.descendants('book') > obj..book AISB, I find “..” counter-intuitive. >> > At least Slice Notation has a change of succeeding: >> > >> > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >> Yes, I think that would be a useful and unproblematic addition. >> >> I would even like a[-1] as in Python ^^^^^^^^^^^^^^^^^ > Doesn't work in bracket notation but at least it works with slice: *facepalm* > ``` > let xs = ['a', 'b', 'c'] > xs.slice(-1) // 'c' > ``` > > I guess you could use proxy to support the bracket form. […] That is what I did and said. Just not with classes. See below :-D >> (seriously, is there a use-case for >> properties named named “-1” in an *array*?). > > I'm too lazy to check but this reminded me that there was a bug/feature > in an earlier version of Firefox that had '-1' and '-2' defined on the > arguments object. The values of those positions were information like > argument length and something else I forget. OK, but that is not an *array*. And a broken implementation (now likely fixed) is not a good argument against the syntax. >> I added support for using >> negative indexes to access elements from the end of an array in >> JSX:array.js:BigArray with Proxy, and BigArray.prototype.get() to do it ^^^^^^^^^^ >> in a backwards-compatible way, about 5 years ago: >> >> > > Any interest in modernizing to post ES6+? Yes. -- PointedEars FAQ: | | Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.