The [this-bind operator](https://github.com/zenparsing/es-function-bind)
would remove the need for officially adding methods to `Object.protoype`,
wouldn't it? For example:
```
import { map, filter } from 'external-lib/objects'
const normalizedGrey = colors
::map(c => (c.red + c.green + c.blue) / 3)
::filter(g => g < someThreshold)
::map(g => (g - min) / (max - min));
```
On Sat, Jan 30, 2016 at 1:47 PM, Kaustubh Karkare <
[email protected]> wrote:
> > Not all objects are used as maps, and when using with map we often use
> `Object.create(null)`, so adding to prototype is definitely a bad idea.
>
> - Much like we're forced to invoke the prototype directly like (in
> functions & NodeLists) `Array.prototype.slice.call(arguments)`, an
> argument could be made that one should need invoke
> `Object.prototype.map.call(objWithoutPrototype, mapFn)`.
> - My main issue with static methods on the object is the lack of
> consistency with the array format. But given that we already have
> `Object.keys` and `Object.values`, there's already precedent for this (plus
> the argument about breaking legacy frameworks). Note that this methods
> should be on the `Map.prototype` at least (given
> `Map.prototype.keys/values` exist), since this argument doesn't apply in
> that case.
>
> > As for whether we should make them static methods of Object, I
> personally don't think this is very useful. Using a for-in loop is enough
> in my opinion.
>
> For-in loops result in unnecessary verbosity, specially in codebases that
> optimize for readability. Comparing something like:
>
> ```
> const normalizedGrey = colors
> .map(c => (c.red + c.green + c.blue) / 3)
> .filter(g => g < someThreshold)
> .map(g => (g - min) / (max - min));
> ```
> vs
>
> ```
> let normalizedGrey = {};
> for (var color in colors) {
> let c = colors[color];
> let g = (c.red + c.green + c.blue) / 3;
> if (g < someThreshold) {
> normalizedGrey[color] = (g - min) / (max - min);
> }
> }
> ```
> The latter has more lines/bytes and is harder to read.
>
> On Sat, Jan 30, 2016 at 11:02 AM, Gary Guo <[email protected]> wrote:
>
>> Not all objects are used as maps, and when using with map we often use
>> `Object.create(null)`, so adding to prototype is definitely a bad idea. As
>> for whether we should make them static methods of Object, I personally
>> don't think this is very useful. Using a for-in loop is enough in my
>> opinion.
>>
>> ------------------------------
>> From: [email protected]
>> Date: Fri, 29 Jan 2016 18:07:30 -0500
>> Subject: Additional methods for Objects (like Arrays)
>> To: [email protected]
>>
>>
>> I have recently come to feel the need for Object.map, which is like
>> Array.map,
>> except that it receive keys instead of indices.
>>
>> Object.prototype.map = function(mapFn, context) {
>> return Object.keys(this)
>> .reduce(function(result, key) {
>> result[key] = mapFn.call(context, this[key], key, this);
>> return result;
>> }, {});
>> };
>>
>> Without this, I frequently do the exact same thing as the above manually,
>> which leads to unnecessary code duplication.
>>
>> Given that, it might make sense to match other methods from
>> Array.prototype
>>
>> Object.map
>> Object.filter
>> Object.every
>> Object.some
>> Object.reduce
>> Object.find
>> Object.findKey // like Array.findIndex
>>
>> Note that wherever applicable, the ordering is non-deterministic.
>>
>>
>> _______________________________________________ es-discuss mailing list
>> [email protected] https://mail.mozilla.org/listinfo/es-discuss
>>
>
>
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss
>
>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss