[Proposal] Array.prototype.includes should evaluate object.toString and/or object.valueOf when determining a match
Andrea Giammarchi
andrea.giammarchi at gmail.com
Wed Jun 20 20:53:13 UTC 2018
> You could even use filter(function(f){f.name==‘abc’;}).length > 0
not really, that's a long way to find what you are looking for, `some`
stops ASAP instead.
> The focus of this proposal is that the purpose of .valueOf and .toString
I think those have valid use cases and changing a method already shipped
long time ago to make use of those methods is surely not one of them.
This will never happen, you might have better luck proposing a new method
(yet I have the feeling it won't happen neither because it's too easy to do
on user land).
Regards
On Wed, Jun 20, 2018 at 8:54 PM, Mike Simon <nixkuroi at gmail.com> wrote:
> True, there are many other ways to make this work. You could even use
> filter(function(f){f.name==‘abc’;}).length > 0 .
>
> The focus of this proposal is that the purpose of .valueOf and .toString
> are to allow for objects to return a default value without requiring the
> matching method to know about the contents or property names of any of
> next.
>
> Array.prototype.some, and any method mentioned above require a that a
> content aware function be passed in to facilitate the match. This proposal
> mitigates that, and allows Array.prototype.includes to evaluate the object
> as the object design was intended.
>
> On Jun 20, 2018, at 11:33 AM, Andrea <andrea.giammarchi at gmail.com>
> wrote:
>
> It looks like you want included to use `==` for comparison, opening a
> whole new world of issues.
>
> You have `some` and your code to do that with ease, same goes for `find`
> or `findIndex`, very appropriate for this use case.
>
> ```js
> items.some(o => o == 'abc');
> ```
>
> Regards
>
> On Wed, Jun 20, 2018 at 8:27 PM, Mike Simon <nixkuroi at gmail.com> wrote:
>
>> [Proposal] Array.prototype.includes should evaluate object.toString
>> and/or object.valueOf when determining a match
>>
>> The problem:
>>
>> If I have a list of objects that contain a toString() prototype that
>> returns a value from the object, Array.prototype.includes does not return
>> true if the value/string returned from the object is a match for the
>> parameter value.
>>
>> Test code:
>>
>> var thingy = function(name) {this.name=name;};
>> thingy.prototype.valueOf = function(){return this.name};
>> thingy.prototype.toString = function(){return this.name};
>> var items = [new thingy('abc'),new thingy('def')];
>> var inc = items.includes('abc');
>> alert(items[0]); // alerts abc
>> alert(inc); // returns false
>>
>> While it’s possible to create this as a list of strings using map, this
>> would seem to conserve memory, as well as reduce the complexity of the code
>> to perform this operation.
>>
>> Link: https://developer.mozilla.org/en-US/docs/Web/JavaScrip
>> t/Reference/Global_Objects/Array/includes
>>
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20180620/27d74048/attachment.html>
More information about the es-discuss
mailing list