Скажем, у меня есть массив var arr = [1, 2, 3]
, и я хочу разделить каждый элемент на элемент, например. var sep = "&"
, поэтому выход [1, "&", 2, "&", 3]
.
Еще один способ подумать о том, что я хочу сделать Array.prototype.join(arr.join(sep)
) без результата, являющегося строкой (потому что элементы и разделитель, которые я пытаюсь использовать, являются объектами, а не строками).
Есть ли функциональный/приятный/элегантный способ сделать это в es6/7 или lodash без чего-то, что кажется неуклюжим:
_.flatten(arr.map((el, i) => [el, i < arr.length-1 ? sep : null])) // too complex
или
_.flatten(arr.map(el => [el, sep]).slice(0,-1) // extra sep added, memory wasted
или даже
arr.reduce((prev,curr) => { prev.push(curr, sep); return prev; }, []).slice(0,-1)
// probably the best out of the three, but I have to do a map already
// and I still have the same problem as the previous two - either
// inline ternary or slice
Изменить: Haskell имеет эту функцию, называемую intersperse