Can you elaborate a bit more on how this is a *common* case in the wider ecosystem?
On Fri, Aug 16, 2019 at 5:29 AM Andrea Giammarchi < andrea.giammar...@gmail.com> wrote: > early reply .... "which otehr cases"? this is just an example: > > [2019, 08, 16, 14, 28, 30].map(i => i < 10 ? ('0' + i) : > i).joinWith('--T::.'); > > On Fri, Aug 16, 2019 at 2:24 PM Andrea Giammarchi < > andrea.giammar...@gmail.com> wrote: > >> `this ${Symbol('throws')} an error`, so anything that cannot be >> represented as string should throw too, as it is for `[1, 2, >> 3].join(Symbol())`. >> >> In few words, everything described as parameter for the >> `Array.prototype.join(param)` should be described as the iterable value, >> nothng new to add, nothing different to expect. >> >> The template literal as is returns a string, but if you use tags, as >> functions, you deal with an array and a collection or extra values (0 to >> template.length - 1). >> >> The current way to flatten a template via tag, used already in various >> projects for a reason or another, is the following one: >> >> ```js >> function tag2str(template) { >> let str = template[0]; >> for (let i = 1, t = template.length; i < t; i++) >> str += arguments[i] + template[i]; >> return str; >> } >> ``` >> >> I am proposing to simplify this common case with something that could be >> used for other cases too. >> >> >> >> >> >> On Fri, Aug 16, 2019 at 1:17 PM Naveen Chawla <naveen.c...@gmail.com> >> wrote: >> >>> Cool. >>> >>> I get it now apart from the "templated string" example. I'm not very >>> knowledgable about templated strings but on the face it looks like >>> 'a${x}b${y}' already inserts x and y into the string, so I'm not sure what >>> else is happening with your proposed method? Clearly I've missed something. >>> >>> Apart from that, how would you handle arrays that whose values are not >>> all strings? >>> >>> For naming is still think "weave" would be OK from what I know so far >>> >>> On Fri, 16 Aug 2019 at 11:08, Andrea Giammarchi < >>> andrea.giammar...@gmail.com> wrote: >>> >>>> given an array, it joins it through the values of the iterable >>>> argument, without ever resulting to undefined >>>> >>>> ['a', 'b', 'c'].joinWith(['-']) would produce "a-b-c" >>>> >>>> ['a', 'b', 'c'].joinWith([1, 2]) would produce "a1b2c" >>>> >>>> ['a', 'b', 'c'].joinWith('012') would produce "a0b1c" >>>> note the string, as iterable, is acceptable too >>>> >>>> const tag = (template, ...values) => template.joinWith(values); >>>> tag`a${Math.random()}b${Math.random()}`; would fill the gap between a >>>> and b, or b and c, with the value returned by the two Math.random() >>>> >>>> ['a', 'b', 'c', 'd'].joinWith('01'); would produce "a0b1c0d" so that >>>> there's never an `undefined >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> On Fri, Aug 16, 2019 at 12:01 PM Naveen Chawla <naveen.c...@gmail.com> >>>> wrote: >>>> >>>>> I'm just not seeing what it's supposed to do. If you could give a >>>>> brief explanation of the array method, and the string method then of >>>>> course >>>>> I would get it. I know it would seem obvious to you from the examples >>>>> alone, it's just not to me. >>>>> >>>>> On Fri, 16 Aug 2019 at 08:32, Andrea Giammarchi < >>>>> andrea.giammar...@gmail.com> wrote: >>>>> >>>>>> Just to re-state: zip from lowdash, does **not** do what my proposed >>>>>> method does ... anything that won't produce the following result is not >>>>>> what I'm proposing >>>>>> >>>>>> console.log(['a', 'b', 'c', 'd'].joinWith([1, 2])); >>>>>> // a1b2c1d >>>>>> >>>>>> function tag2str(template, ...values) { >>>>>> return template.joinWith(values); >>>>>> } >>>>>> >>>>>> tag2str`a${1}b${2}c`; >>>>>> // "a1b2c" >>>>>> >>>>>> On Fri, Aug 16, 2019 at 5:57 AM Isiah Meadows <isiahmead...@gmail.com> >>>>>> wrote: >>>>>> >>>>>>> For that, I'd rather see an `interleave` that just rotates through >>>>>>> all >>>>>>> its arguments. It'd be basically sugar for `.zip().flat()`, but an >>>>>>> implementation could optimize the heck out of it. (In particular, >>>>>>> they >>>>>>> could iterate through them one-by-one and only allocate once, not in >>>>>>> the hot loop, so it'd be fast.) >>>>>>> >>>>>>> I at one point had it in my list of wishlist proposals, but it >>>>>>> somehow >>>>>>> disappeared. I've since recreated it: >>>>>>> >>>>>>> https://github.com/isiahmeadows/es-stdlib-proposals/blob/master/proposals/array/interleave.md >>>>>>> >>>>>>> ----- >>>>>>> >>>>>>> Isiah Meadows >>>>>>> cont...@isiahmeadows.com >>>>>>> www.isiahmeadows.com >>>>>>> >>>>>>> >>>>>>> On Thu, Aug 15, 2019 at 1:12 PM Andrea Giammarchi >>>>>>> <andrea.giammar...@gmail.com> wrote: >>>>>>> > >>>>>>> > That;s not useful for template literals tags though >>>>>>> > >>>>>>> > _.zip(['a', 'b', 'c'], [1, 2]); >>>>>>> > [["a", 1], ["b", 2], ["c", undefined]] >>>>>>> > >>>>>>> > it basically does nothing I've proposed ... any other name >>>>>>> suggestion? >>>>>>> > >>>>>>> > On Thu, Aug 15, 2019 at 3:40 PM Michał Wadas < >>>>>>> michalwa...@gmail.com> wrote: >>>>>>> >> >>>>>>> >> https://lodash.com/docs/#zip >>>>>>> >> https://docs.python.org/3/library/functions.html#zip >>>>>>> >> >>>>>>> >> On Thu, 15 Aug 2019, 15:34 Andrea Giammarchi, < >>>>>>> andrea.giammar...@gmail.com> wrote: >>>>>>> >>> >>>>>>> >>> the suggested name is just ... suggested, I don't have strong >>>>>>> opinion on it, it just `join` values through other values >>>>>>> >>> what's `Array.zip` ? I've no idea >>>>>>> >>> >>>>>>> >>> >>>>>>> >>> On Thu, Aug 15, 2019 at 12:53 PM Michał Wadas < >>>>>>> michalwa...@gmail.com> wrote: >>>>>>> >>>> >>>>>>> >>>> I would rather see Array.zip, it covers this use case. >>>>>>> >>>> >>>>>>> >>>> On Thu, 15 Aug 2019, 10:50 Andrea Giammarchi, < >>>>>>> andrea.giammar...@gmail.com> wrote: >>>>>>> >>>>> >>>>>>> >>>>> >>>>>>> >>>>> I wonder if there's any interest in adding another handy Array >>>>>>> method as joinWith could be: >>>>>>> >>>>> >>>>>>> >>>>> ```js >>>>>>> >>>>> // proposal example >>>>>>> >>>>> Array.prototype.joinWith = function (values) { >>>>>>> >>>>> const {length} = this; >>>>>>> >>>>> if (length < 2) >>>>>>> >>>>> return this.join(''); >>>>>>> >>>>> const out = [this[0]]; >>>>>>> >>>>> const len = values.length; >>>>>>> >>>>> for (let i = 1; i < length; i++) { >>>>>>> >>>>> console.log(i, len); >>>>>>> >>>>> out.push(values[(i - 1) % len], this[i]); >>>>>>> >>>>> } >>>>>>> >>>>> return out.join(''); >>>>>>> >>>>> }; >>>>>>> >>>>> ``` >>>>>>> >>>>> >>>>>>> >>>>> The goal is to simplify joining array entries through not the >>>>>>> same value, example: >>>>>>> >>>>> >>>>>>> >>>>> ```js >>>>>>> >>>>> console.log(['a', 'b', 'c', 'd'].joinWith([1, 2])); >>>>>>> >>>>> // a1b2c1d >>>>>>> >>>>> >>>>>>> >>>>> function tag2str(template, ...values) { >>>>>>> >>>>> return template.joinWith(values); >>>>>>> >>>>> } >>>>>>> >>>>> >>>>>>> >>>>> tag2str`a${1}b${2}c`; >>>>>>> >>>>> // "a1b2c" >>>>>>> >>>>> ``` >>>>>>> >>>>> >>>>>>> >>>>> Throughts? >>>>>>> >>>>> _______________________________________________ >>>>>>> >>>>> es-discuss mailing list >>>>>>> >>>>> es-discuss@mozilla.org >>>>>>> >>>>> https://mail.mozilla.org/listinfo/es-discuss >>>>>>> > >>>>>>> > _______________________________________________ >>>>>>> > es-discuss mailing list >>>>>>> > es-discuss@mozilla.org >>>>>>> > https://mail.mozilla.org/listinfo/es-discuss >>>>>>> >>>>>> _______________________________________________ >>>>>> es-discuss mailing list >>>>>> es-discuss@mozilla.org >>>>>> https://mail.mozilla.org/listinfo/es-discuss >>>>>> >>>>> _______________________________________________ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss >
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss