Merge map values

Jordan Harband ljharb at gmail.com
Tue Apr 28 17:59:25 UTC 2015


Would `new Map(maps.reduce((e, m) => e.concat(Array.from(m)), []))` not
create a new Map from merging an array of `maps`? (It relies on the
`Map.prototype.[Symbol.iterator]` which is `Map#entries`, and the
`iterable` argument of the `Map` constructor)

On Tue, Apr 28, 2015 at 6:06 AM, Andrea Giammarchi <
andrea.giammarchi at gmail.com> wrote:

> Sorry Axel, I was rushing, it sounded over-rude ... so, yes, Map are
> better for words, **but** in this specific case it was about all
> chars/surrogate pairs, that's why I've said Objects where safe ... plus the
> rest, reduce also is very handy for this exact kind of things ;-)
>
> But yes, if it was a owrd counter, I'd use same logic with new Map passed
> instead of {} and the correct .set/.get invoke
>
> Best Regards
>
> On Tue, Apr 28, 2015 at 2:02 PM, Andrea Giammarchi <
> andrea.giammarchi at gmail.com> wrote:
>
>> Moreover `undefined|0` is exactly 0. The `|0` is used in asm.js because
>> it explicitly declares the intent.
>>
>> So again, no error in there ;-)
>>
>> Regards
>>
>> On Tue, Apr 28, 2015 at 1:58 PM, Andrea Giammarchi <
>> andrea.giammarchi at gmail.com> wrote:
>>
>>> Now you read again the "exercise" and realize that's impossible to have
>>> as a piutfall ... no, I just used a KISS approach for what I can tell, no
>>> pitfalls with one single surrogate could happen by specs.
>>>
>>> Best Regards
>>>
>>> On Tue, Apr 28, 2015 at 1:57 PM, Axel Rauschmayer <axel at rauschma.de>
>>> wrote:
>>>
>>>> With Maps, there are less pitfalls. For example: what if you want to
>>>> use your version to count words and one of the words is `__proto__`? Most
>>>> pitfalls can be fixed via `Object.create(null)`, but Maps are more
>>>> straightforward for data (vs. code).
>>>>
>>>> But your version can be easily adapted to Maps, I like the way you use
>>>> `reduce()`. The `|` should be a `||`.
>>>>
>>>> On 28 Apr 2015, at 14:31 , Andrea Giammarchi <
>>>> andrea.giammarchi at gmail.com> wrote:
>>>>
>>>> Not sure why everyone went for the `Map` version when in JS every
>>>> object is basically the equivalent of a `Map` already :-)
>>>>
>>>> ```js
>>>> let m = Array.from("mainn").reduce((m,k) => ((m[k] = 1 + (m[k] | 0)),
>>>> m), {});
>>>> ```
>>>>
>>>> looks a win to me, if you need to check or drop chars from the string I
>>>> would probably do it once before passing that to `Array.from`
>>>>
>>>> Agreed with Kevin this is rather a StackOverflow like question :-)
>>>>
>>>> Best Regards
>>>>
>>>>
>>>> On Tue, Apr 28, 2015 at 1:19 PM, Kevin Smith <zenparsing at gmail.com>
>>>> wrote:
>>>>
>>>>> Another option:
>>>>>
>>>>>     var map = new Map;
>>>>>     Array.from("mainn")
>>>>>       .map(c => c.toLowerCase())
>>>>>       .forEach(c => map.set(c, (map.get(c) | 0) + 1));
>>>>>
>>>>> This kind of question is probably better left for StackOverflow,
>>>>> however.
>>>>>
>>>>> _______________________________________________
>>>>> es-discuss mailing list
>>>>> es-discuss at mozilla.org
>>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>>
>>>>>
>>>>
>>>> --
>>>> Dr. Axel Rauschmayer
>>>> axel at rauschma.de
>>>> rauschma.de
>>>>
>>>>
>>>>
>>>>
>>>
>>
>
> _______________________________________________
> 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/20150428/05620636/attachment.html>


More information about the es-discuss mailing list