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

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

  • автор:

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

Может быть в 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()) 

Поменять элементы массива местами

Author24 — интернет-сервис помощи студентам

то есть меня элементы местами в каждой паре
каким способом его отсортировать ? помогите , пожалуйста . заранее огромное спасибо!

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Поменять местами первый и последний элементы. Все единичные элементы массива заменить нулями
Люди добрые, помогите плиз с задачками. В массиве Р, размерности 150 150. поменять местами первый.

Поменять местами элементы массива
в двух кваратних матрицах видилено четыре сектора , ограниченные диагоналями : верхний, нижний .

Поменять местами элементы массива
Дано одномерный массив с четным количеством элементов. Поменять местами первый элемент с последним.

2665 / 2240 / 240
Регистрация: 03.07.2012
Сообщений: 8,141
Записей в блоге: 1
Для начала просто поменяй значения двух переменных.
Регистрация: 19.10.2013
Сообщений: 30

int mas2[8];

128 / 125 / 39
Регистрация: 11.04.2010
Сообщений: 255

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#include using namespace std; int main() { int mas[6] = {1,2,4,5,7,8}; cout  "Input:\n"; for (int i = 0; i  6; i++) cout  " "  mas[i]; for (int i = 1; i  6; i += 2) { int t = mas[i-1]; mas[i-1] = mas[i]; mas[i] = t; } cout  "\n\nOutput:\n"; for (int i = 0; i  6; i++) cout  " "  mas[i]; cout  endl; system("pause"); return 0; }

Регистрация: 07.02.2017
Сообщений: 1

Alexdemath, Alexdemath,

привет, а можешь тоже самое только, поменять первый четный элемент массива, и последний четный?
то есть сходя из этого задания, поменять местами 2 — 8

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Поменять местами элементы массива
Есть указатель Mas void *Mas; на массив структур вида. struct ST< int a; int b; int c; int.

Поменять элементы массива местами
Дан массив, элементы которого равны либо единице, либо двойке. Напишите программу, которая.

Поменять элементы массива местами
Помогите, пожалуйста. Мне дано массив Y. Каждый элемент массива должен соответствовать формуле.

Поменять местами элементы массива
В массиве A из N элементов поменять местами первый элемент с последним, второй — с предпоследним и.

Поменять местами элементы массива
в заданном массиве из n элементов поменять местами элементы с n/2+1 по n: a(индекс n/2+i)=a(индекс.

Поменять местами элементы массива
Здравствуйте! В задании сказано создать динамический массив, в который пользователь сам задает.

Или воспользуйтесь поиском по форуму:

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

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

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

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 Комментировать

Array.prototype.splice()

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015 .

Сводка

Метод splice() изменяет содержимое массива, удаляя существующие элементы и/или добавляя новые.

Синтаксис

array.splice(start[, deleteCount[, item1[, item2[, . ]]]])

Параметры

Индекс, по которому начинает изменять массив. Если больше длины массива, реальный индекс будет установлен на длину массива. Если отрицателен, указывает индекс элемента с конца.

Целое число, показывающее количество старых удаляемых из массива элементов. Если deleteCount равен 0, элементы не удаляются. В этом случае вы должны указать как минимум один новый элемент. Если deleteCount больше количества элементов, оставшихся в массиве, начиная с индекса start , то будут удалены все элементы до конца массива.

Необязательные параметры. Добавляемые к массиву элементы. Если вы не укажете никакого элемента, splice() просто удалит элементы из массива.

Возвращаемое значение

Массив, содержащий удалённые элементы. Если будет удалён только один элемент, вернётся массив из одного элемента. Если никакие элементы не будут удалены, вернётся пустой массив.

Описание

Если количество указанных вставляемых элементов будет отличным от количества удаляемых элементов, массив изменит длину после вызова.

Примеры

Удаляет 0 элементов по индексу 2 и вставляет «drum»

var myFish = ["angel", "clown", "mandarin", "sturgeon"]; var removed = myFish.splice(2, 0, "drum"); // myFish равен ["angel", "clown", "drum", "mandarin", "sturgeon"] // removed равен [], ничего не удалено 

Удаляет 1 элемент по индексу 3

var myFish = ["angel", "clown", "drum", "mandarin", "sturgeon"]; var removed = myFish.splice(3, 1); // removed равен ["mandarin"] // myFish равен ["angel", "clown", "drum", "sturgeon"] 

Удаляет 1 элемент по индексу 2 и вставляет «trumpet»

var myFish = ["angel", "clown", "drum", "sturgeon"]; var removed = myFish.splice(2, 1, "trumpet"); // myFish равен ["angel", "clown", "trumpet", "sturgeon"] // removed равен ["drum"] 

Удаляет 2 элемента начиная с индекса 0 и вставляет «parrot», «anemone» и «blue»

var myFish = ["angel", "clown", "trumpet", "sturgeon"]; var removed = myFish.splice(0, 2, "parrot", "anemone", "blue"); // myFish равен ["parrot", "anemone", "blue", "trumpet", "sturgeon"] // removed равен ["angel", "clown"] 

Удаляет 2 элемента начиная с индекса 2

var myFish = ["parrot", "anemone", "blue", "trumpet", "sturgeon"]; var removed = myFish.splice(myFish.length - 3, 2); // myFish равен ["parrot", "anemone", "sturgeon"] // removed равен ["blue", "trumpet"] 

Удаляет 1 элемент по индексу -2

var myFish = ["angel", "clown", "mandarin", "sturgeon"]; var removed = myFish.splice(-2, 1); // myFish равен ["angel", "clown", "sturgeon"] // removed равен s ["mandarin"] 

Удаляет все элементы после индекса 2 (включительно)

var myFish = ["angel", "clown", "mandarin", "sturgeon"]; var removed = myFish.splice(2); // myFish равен ["angel", "clown"] // removed равен ["mandarin", "sturgeon"] 

Спецификации

Specification
ECMAScript Language Specification
# sec-array.prototype.splice

Совместимость с браузерами

BCD tables only load in the browser

Обратная совместимость

В JavaScript 1.2 метод splice() возвращал удалённый элемент только если был удалён один элемент (параметр deleteCount равен 1); в противном случае метод возвращал массив с удалёнными элементами. Обратите внимание, что последним браузером, использующим JavaScript 1.2, был Netscape Navigator 4, так что вы можете считать, что splice() всегда возвращает массив.

Смотрите также

  • push() / pop() — добавление / удаление элементов с конца массива
  • unshift() / shift() — добавление / удаление элементов с начала массива
  • concat() — возвращает новый массив, состоящий из данного массива, соединённого с другими массивами и/или значениями

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

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