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


Groups > comp.lang.javascript > #39427

Re: Referencing an object prop with a string

From Thomas 'PointedEars' Lahn <PointedEars@web.de>
Newsgroups comp.lang.javascript
Subject Re: Referencing an object prop with a string
Date 2021-02-03 19:42 +0100
Organization PointedEars Software (PES)
Message-ID <2637940.BEx9A2HvPv@PointedEars.de> (permalink)
References (1 earlier) <5793bf43-6506-4351-bdca-3d59d740c5e5n@googlegroups.com> <806120824.0ifERbkFSE@PointedEars.de> <ddc05c02-03b1-4600-8236-5453b413a54an@googlegroups.com> <2081055.NgBsaNRSFp@PointedEars.de> <a6cd17cf-36d2-4724-9ca7-f512f7c4c03en@googlegroups.com>

Show all headers | View raw


Michael Haufe (TNO) wrote:

> […] 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:
>> > 
>> > <https://github.com/tc39/proposal-slice-notation>
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> 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:
>> 
>> 
<https://github.com/PointedEars/JSX/blob/e6eb05cb945df7b7304d572ccbac90ae9a632286/array.js#L491-L1158>
> 
> Any interest in modernizing to post ES6+?

Yes.

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | <http://PointedEars.de/es-matrix>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.

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


Thread

Referencing an object prop with a string Andrew Poulos <ap_prog@hotmail.com> - 2021-01-31 14:42 +1100
  Re: Referencing an object prop with a string "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-01-30 19:52 -0800
    Re: Referencing an object prop with a string "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-01-30 19:54 -0800
    Re: Referencing an object prop with a string Andrew Poulos <ap_prog@hotmail.com> - 2021-01-31 20:29 +1100
      Re: Referencing an object prop with a string H e <he12457@hotmail.com> - 2021-01-31 02:17 -0800
    Re: Referencing an object prop with a string Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-02-02 04:06 +0100
      Re: Referencing an object prop with a string "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-02-02 13:01 -0800
        Re: Referencing an object prop with a string Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-02-02 23:50 +0100
          Re: Referencing an object prop with a string "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-02-02 19:19 -0800
            Re: Referencing an object prop with a string "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2021-02-02 19:26 -0800
            Re: Referencing an object prop with a string Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-02-03 19:42 +0100

csiph-web