<div dir="ltr">Cool.<div><br></div><div>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.</div><div><br></div><div>Apart from that, how would you handle arrays that whose values are not all strings?</div><div><br></div><div>For naming is still think "weave" would be OK from what I know so far</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, 16 Aug 2019 at 11:08, Andrea Giammarchi <<a href="mailto:andrea.giammarchi@gmail.com">andrea.giammarchi@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>given an array, it joins it through the values of the iterable argument, without ever resulting to undefined</div><div><br></div><div>['a', 'b', 'c'].joinWith(['-']) would produce "a-b-c"</div><br><div>['a', 'b', 'c'].joinWith([1, 2]) would produce "a1b2c"<div><br></div><div>['a', 'b', 'c'].joinWith('012') would produce "a0b1c"</div><div>note the string, as iterable, is acceptable too</div><div><br></div><div>const tag = (template, ...values) => template.joinWith(values);</div><div>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()</div><div><br></div><div>['a', 'b', 'c', 'd'].joinWith('01'); would produce "a0b1c0d" so that there's never an `undefined<br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Aug 16, 2019 at 12:01 PM Naveen Chawla <<a href="mailto:naveen.chwl@gmail.com" target="_blank">naveen.chwl@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">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.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, 16 Aug 2019 at 08:32, Andrea Giammarchi <<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>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</div><br><div><span class="gmail-m_3286930923975228254gmail-m_-3252800813123468851gmail-m_2088145230228471687gmail-m_2243312729164488012gmail-im">console.log(['a', 'b', 'c', 'd'].joinWith([1, 2]));<br>// a1b2c1d<br><br>function tag2str(template, ...values) {<br>  return template.joinWith(values);<br>}<br><br>tag2str`a${1}b${2}c`;<br>// "a1b2c"</span></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Aug 16, 2019 at 5:57 AM Isiah Meadows <<a href="mailto:isiahmeadows@gmail.com" target="_blank">isiahmeadows@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">For that, I'd rather see an `interleave` that just rotates through all<br>
its arguments. It'd be basically sugar for `.zip().flat()`, but an<br>
implementation could optimize the heck out of it. (In particular, they<br>
could iterate through them one-by-one and only allocate once, not in<br>
the hot loop, so it'd be fast.)<br>
<br>
I at one point had it in my list of wishlist proposals, but it somehow<br>
disappeared. I've since recreated it:<br>
<a href="https://github.com/isiahmeadows/es-stdlib-proposals/blob/master/proposals/array/interleave.md" rel="noreferrer" target="_blank">https://github.com/isiahmeadows/es-stdlib-proposals/blob/master/proposals/array/interleave.md</a><br>
<br>
-----<br>
<br>
Isiah Meadows<br>
<a href="mailto:contact@isiahmeadows.com" target="_blank">contact@isiahmeadows.com</a><br>
<a href="http://www.isiahmeadows.com" rel="noreferrer" target="_blank">www.isiahmeadows.com</a><br>
<br>
<br>
On Thu, Aug 15, 2019 at 1:12 PM Andrea Giammarchi<br>
<<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@gmail.com</a>> wrote:<br>
><br>
> That;s not useful for template literals tags though<br>
><br>
> _.zip(['a', 'b', 'c'], [1, 2]);<br>
> [["a", 1], ["b", 2], ["c", undefined]]<br>
><br>
> it basically does nothing I've proposed ... any other name suggestion?<br>
><br>
> On Thu, Aug 15, 2019 at 3:40 PM Michał Wadas <<a href="mailto:michalwadas@gmail.com" target="_blank">michalwadas@gmail.com</a>> wrote:<br>
>><br>
>> <a href="https://lodash.com/docs/#zip" rel="noreferrer" target="_blank">https://lodash.com/docs/#zip</a><br>
>> <a href="https://docs.python.org/3/library/functions.html#zip" rel="noreferrer" target="_blank">https://docs.python.org/3/library/functions.html#zip</a><br>
>><br>
>> On Thu, 15 Aug 2019, 15:34 Andrea Giammarchi, <<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@gmail.com</a>> wrote:<br>
>>><br>
>>> the suggested name is just ... suggested, I don't have strong opinion on it, it just `join` values through other values<br>
>>> what's `Array.zip` ? I've no idea<br>
>>><br>
>>><br>
>>> On Thu, Aug 15, 2019 at 12:53 PM Michał Wadas <<a href="mailto:michalwadas@gmail.com" target="_blank">michalwadas@gmail.com</a>> wrote:<br>
>>>><br>
>>>> I would rather see Array.zip, it covers this use case.<br>
>>>><br>
>>>> On Thu, 15 Aug 2019, 10:50 Andrea Giammarchi, <<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@gmail.com</a>> wrote:<br>
>>>>><br>
>>>>><br>
>>>>> I wonder if there's any interest in adding another handy Array method as joinWith could be:<br>
>>>>><br>
>>>>> ```js<br>
>>>>> // proposal example<br>
>>>>> Array.prototype.joinWith = function (values) {<br>
>>>>>   const {length} = this;<br>
>>>>>   if (length < 2)<br>
>>>>>     return this.join('');<br>
>>>>>   const out = [this[0]];<br>
>>>>>   const len = values.length;<br>
>>>>>   for (let i = 1; i < length; i++) {<br>
>>>>>     console.log(i, len);<br>
>>>>>     out.push(values[(i - 1) % len], this[i]);<br>
>>>>>   }<br>
>>>>>   return out.join('');<br>
>>>>> };<br>
>>>>> ```<br>
>>>>><br>
>>>>> The goal is to simplify joining array entries through not the same value, example:<br>
>>>>><br>
>>>>> ```js<br>
>>>>> console.log(['a', 'b', 'c', 'd'].joinWith([1, 2]));<br>
>>>>> // a1b2c1d<br>
>>>>><br>
>>>>> function tag2str(template, ...values) {<br>
>>>>>   return template.joinWith(values);<br>
>>>>> }<br>
>>>>><br>
>>>>> tag2str`a${1}b${2}c`;<br>
>>>>> // "a1b2c"<br>
>>>>> ```<br>
>>>>><br>
>>>>> Throughts?<br>
>>>>> _______________________________________________<br>
>>>>> es-discuss mailing list<br>
>>>>> <a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
>>>>> <a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
><br>
> _______________________________________________<br>
> es-discuss mailing list<br>
> <a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
> <a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>
</blockquote></div>
</blockquote></div>