Как поменять местами элементы массива js
Перейти к содержимому

Как поменять местами элементы массива js

  • автор:

Как поменять элементы в массиве?

Дан массив [1, 2, 3, 4, 5, 6, 7, 8 ,9 ,10 ,11 ,12] , нужно поменять местами 3 -> 6, 8 -> 12, 10 -> 5. Как это можно воплотить?

  • Вопрос задан более трёх лет назад
  • 24764 просмотра

1 комментарий

Простой 1 комментарий

yarkov

Алексей Ярков @yarkov Куратор тега JavaScript

Заранее известно какие именно элементы менять местами или есть какая-то закономерность?

Решения вопроса 3

sfi0zy

Ivan Bogachev @sfi0zy Куратор тега JavaScript

Creative frontend developer

Сделать можно тысячей способов, например так:

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; [arr[2], arr[5]] = [arr[5], arr[2]]; [arr[7], arr[11]] = [arr[11], arr[7]]; [arr[4], arr[9]] = [arr[9], arr[4]]; console.log(arr); // [1, 2, 6, 4, 10, 3, 7, 12, 9, 5, 11, 8]

Ответ написан более трёх лет назад

Нравится 4 1 комментарий

alex-1917

ядаженасчитал 1983 способа

Сергей Соколов @sergiks Куратор тега JavaScript

// меняет два элемента массива in-place function swap(arr, a, b) < arr[a] = arr.splice(b, 1, arr[a])[0]; >const Twelve = [1, 2, 3, 4, 5, 6, 7, 8 ,9 ,10 ,11 ,12]; swap( Twelve, 2, 5); // индексы считаются от 0 swap( Twelve, 7, 11); swap( Twelve, 9, 4); Twelve // [1,2,6,4,10,3,7,12,9,5,11,8]

Ответ написан более трёх лет назад

Комментировать

Нравится 4 Комментировать

0xD34F

0xD34F @0xD34F Куратор тега JavaScript

const arr = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; [ [ 3, 6 ], [ 8, 12 ], [ 5, 10 ] ].forEach(([ a, b ]) => < const ia = arr.indexOf(a); const ib = arr.indexOf(b); if (ia !== -1 && ib !== -1) < [ arr[ia], arr[ib] ] = [ arr[ib], arr[ia] ]; >>);

Ответ написан более трёх лет назад

Комментировать

Нравится 2 Комментировать

Самый простой способ поменять местами строковые элементы массива?

Может быть в Js есть более элегантный способ? (ну как функция .SORT для сортировки) Или это единственный способ?

Отслеживать
124k 24 24 золотых знака 131 131 серебряный знак 312 312 бронзовых знаков
задан 15 янв 2017 в 23:45
Менеджер Типографии Менеджер Типографии
587 2 2 золотых знака 5 5 серебряных знаков 18 18 бронзовых знаков

5 ответов 5

Сортировка: Сброс на вариант по умолчанию

В современном js такой способ есть, называется деструктуризирующее присваивание (destructuring assignment):

[mass[1], mass[3]] = [mass[3], mass[1]]; 
[a, b] = [b, a]; 

Вот только IE11 и Андроиды так не умеют из коробки, если хочется писать так чтобы работало везде — придется транспилировать.

Еще есть везде-рабочий «ниндзя» способ, за который в приличном обществе бьют ногами за нечитаемость:

mass[1] = [mass[3], mass[3] = mass[1]][0]; 
a = [b, b = a][0]; 

Отслеживать
ответ дан 15 янв 2017 в 23:57
Утка Учится Укрываться Утка Учится Укрываться
7,157 4 4 золотых знака 29 29 серебряных знаков 56 56 бронзовых знаков
Отлично объяснили. Спасибо.
16 янв 2017 в 1:03

вот ещё одна старая рабочая «нидзя» для коррекции массива

var arr = [2,1,3,5,4,0] arr[1] = arr.splice(0,1, arr[1])[0] //console.log(arr) 

массивы можно корректировать через метод, для понимания снабдив код комментариями.

function correctArr(_arr, _param) < /* коррекция элементов массива по паре индекса * _arr -- массив требующий коррекции * _param -- пара [n1,n2] -- индексы массива для взаимной перестановки */ _arr[_param[1]] = _arr.splice(_param[0],1, _arr[_param[1]])[0] >//correctArr(arr, [1,0]) //console.log(arr.toString()) 

можно написать метод c циклом с обращением к функции, и возвращением нового массива

function corrects_Arr() < var _param, _arr = arguments[0].slice(), _arguments = Array.prototype.slice.call(arguments, 1) for(var i = 0; i < _arguments.length; i++)< correctArr(_arr, _arguments[i]) >return _arr > /* console.log( arr.toString() +" "+ "инспектируемый массив остался прежним" +"\n"+ corrects_Arr(arr, [0,1], [4,3]).toString() +" "+ "вернули скорректированный массив" ) */ 

для простоты будущего обращения с массивами, можно утяжелить решение задачи, по пути присвоения прототипу конструктора Array своего метода, который можно будит вызывать на всех массивах.

Array.prototype["myCorrects"] = function(_param) < if(_param)< this[_param[1]] = this.splice(_param[0],1, this[_param[1]])[0] this.constructor.prototype.myCorrects.apply(this, Array.prototype.slice.call(arguments, 1)) >return this > arr = arr.myCorrects([0,1], [3,4]).splice(-1,1).concat(arr) console.log(arr.toString()) 

Как поменять местами элементы массива в javascript?

Нужно сделать такое вот упражнение, помогите с кодом:
1)Создайте массив из 10 любых чисел.
2)Выведите массив через цикл.
3)Поменяйте все элементы в массиве местами, то есть тот, что был 10-м, сделайте 1-м. Тот, что был 9-м, сделайте 2-м и так далее.
4)Выведите через цикл получившийся массив (на следующей строке) и посмотрите, всё ли правильно сделано.

Лучший ответ

Остальные ответы

Могу помочь с алгоритмом, т. к. . javascript не знаю. Представь, что массив — это некоторое количество занятых полок (шкаф) . Предположим, что у нас есть одна отдельная полка — переменная. С помощью этой полки можно поменять элементы в шкафу местами с первого на десятый и т. п. .
Делается это след. образом:
первый элемент в шкафу помещается на свободную полку, затем на освободившееся место в шкафу помещается последний элемент.
Затем с отдельной полки убирается элемент на свободное место в шкафу.
Таким образом получили след. порядок.
10й, 2й, 3й, ..8й, 9й, 1й.
Затем повторяем операцию для 2го и 9го элементов.
Индексы элементов в общем случае будут выглядеть так:
если n — четное
i=0,n/2-1, j=length(mass)-i
если нечетное
i=0,round(n/2)-2, j=length(mass)-i

Похожие вопросы

Поменять местами 2 значения в новом массиве

Реализуй функцию switchPlaces , которая в массиве arr меняет местами значения с индексами index1 и index2 . Функция должна возвращать новый массив, и не изменять оригинальный arr . Если индексы невалидные (выходят за границы массива), то switchPlaces должна вернуть новый массив без изменений.

switchPlaces(['uno', 'tuo', 'tre'], 0, 3)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *