Я помогал пользователю в Sanity.io Вчера выполняя некоторую миграцию контента, где они хотели взять последний элемент массива и поместить его на первую позицию. Каждый раз, когда у меня есть такой вопрос, мне нравится видеть, удается ли мне решить его, не посещая библиотеки. Оба потому, что я не хочу вводить больше зависимостей для человека с вопросом, но, прежде всего, это возможность для некоторых умственных упражнений.
Итак, как изменить массив, как это:
["Cersei", "Joffrey", "Ilyn", "The Mountain", "The Hound", "Melisandre", "Beric", "Thoros", "Tywin", "Meryn", "Walder"]
к этому?
["Walder", "Cersei", "Joffrey", "Ilyn", "The Mountain", "The Hound", "Melisandre", "Beric", "Thoros", "Tywin", "Meryn"]
Мой первый инстинкт состоял в том, чтобы сделать новый массив, только что нацеленный на последний элемент с длиной списка, вычтенной 1, а затем распространяя остальную часть массива, используя сплайс Анкет Толкайте зеленый запустить кнопка для запуска кода:
Некоторые из вас уже догадаются, почему это плохая идея, и некоторые из вас будут похожи на меня и всегда смешивают сплайс и кусочек . Посмотрим, что происходит с список Когда мы запустить Код выше:
Не идеален (если вы не Арья). Замена сплайс с Среза оставляет оригинальный массив нетронутым и не будет мутировать (что может привести к горе проблем):
Это оставляет нам именно то, что мы хотим.
Еще один способ сделать это – использовать Array.Prototype.Reduce -Мете, который для меня чувствует себя немного чище. Также . Reduce стоит потратить время на обучение.
Это, конечно, можно превратить в функцию. Как бы заманчиво могло бы быть, я не рекомендую использовать Аноним Стрелка ( => ) Функция для этого, так как она не отображается с именем в трассировке стека консоли, если что -то не так происходит:
Теперь я уверен, что есть много более умных способов сделать это. И причина, по которой я пишу это и ставлю это здесь, заключается в том, что я хочу узнать о них.
Как бы вы это решили?
Оригинал: “https://dev.to/kmelve/how-to-shift-array-position-in-vanilla-javascript-59oa”