Я пытаюсь использовать reduce()
объединения набора массивов в "разборном" порядке, чтобы элементы с одинаковыми индексами были вместе. Например:
input = [["one","two","three"],["uno","dos"],["1","2","3","4"],["first","second","third"]]
output = [ 'first','1','uno','one','second','2','dos','two','third','3','three','4' ]
Неважно, в каком порядке идут элементы с похожим индексом, пока они вместе, поэтому результат 'one','uno','1'...
будет хорошим, как и выше. Я хотел бы сделать это просто используя неизменяемые переменные, если это возможно.
У меня есть способ, который работает:
const output = input.reduce((accumulator, currentArray, arrayIndex)=>{
currentArray.forEach((item,itemIndex)=>{
const newIndex = itemIndex*(arrayIndex+1);
accumulator.splice(newIndex<accumulator.length?newIndex:accumulator.length,0,item);
})
return accumulator;
})
Но это не очень красиво, и мне это не нравится, особенно из-за того, как он мутирует аккумулятор в методе forEach. Я чувствую, что должен быть более элегантный метод.
Я не могу поверить, что никто не спрашивал об этом раньше, но я пробовал кучу разных запросов и не могу найти его, поэтому, пожалуйста, скажите мне, если он есть, и я пропустил его. Есть ли способ лучше?
Чтобы пояснить каждый вопрос в комментариях, я хотел бы иметь возможность делать это без изменения каких-либо переменных или массивов, как я это делаю с accumulator.splice
и использовать только функциональные методы, такие как .map
или .reduce
не мутирующий цикл. как .forEach
.