- Как поменять элементы в массиве?
- Array.prototype.reverse()
- Интерактивный пример
- Синтаксис
- Параметры
- Возвращаемое значение
- Описание
- Примеры
- Пример: обращение порядка элементов в массиве
- Спецификации
- Совместимость с браузерами
- Смотрите также
- Found a content problem with this page?
- MDN
- Support
- Our communities
- Developers
- JavaScript | Как перемешать массив?
- Самый простой способ перемешивания массива в JavaScript
- Как случайным образом поменять местами элементы массива? ( Array shuffle )
- Видео
- Функция перемешивания массива
- Метод перемешивания массива
- Как работает функция и метод? Логика работы
- Итог
Как поменять элементы в массиве?
Дан массив [1, 2, 3, 4, 5, 6, 7, 8 ,9 ,10 ,11 ,12] , нужно поменять местами 3 -> 6, 8 -> 12, 10 -> 5. Как это можно воплотить?
Простой 1 комментарий
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]
// меняет два элемента массива 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]
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), ib = arr.indexOf(b); if (ia !== -1 && ib !== -1) < [ arr[ia], arr[ib] ] = [ arr[ib], arr[ia] ]; >>);
Array.prototype.reverse()
Метод reverse() на месте обращает порядок следования элементов массива. Первый элемент массива становится последним, а последний — первым.
Интерактивный пример
Синтаксис
Параметры
Возвращаемое значение
Описание
Метод reverse() на месте переставляет элементы массива, на котором он был вызван, изменяет массив и возвращает ссылку на него.
Примеры
Пример: обращение порядка элементов в массиве
В следующем примере создаётся массив myArray , содержащий три элемента, а затем массив переворачивается.
var myArray = ['один', 'два', 'три']; myArray.reverse(); console.log(myArray) // ['три', 'два', 'один']
Спецификации
Совместимость с браузерами
BCD tables only load in the browser
Смотрите также
Found a content problem with this page?
This page was last modified on 7 нояб. 2022 г. by MDN contributors.
Your blueprint for a better internet.
MDN
Support
Our communities
Developers
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2023 by individual mozilla.org contributors. Content available under a Creative Commons license.
JavaScript | Как перемешать массив?
Самый простой способ перемешивания массива в JavaScript
let arr = [1,2,3,4,5,6,7,8,9,10,11] arr.sort(()=>Math.random()-0.5) [4, 1, 9, 6, 2, 10, 5, 11, 3, 8, 7]
Выглядит это очень просто. Самое важное то, что этот простой способ в реальности перемешивает массив. Не понятно только как он работает. Давайте попробуем разобраться.
Начнём с метода sort() т. к. вся «магия» происходит внутри него. Из стандарта ECMAScript мы знаем, что метод sort() принимает в качестве первого (и единственного) параметра функцию сравнения. Она может быть определена, а может и не быть определена.
Если функция сравнения ( comparefn ) ОПРЕДЕЛЕНА, то она принимает два аргумента x и y и возвращает:
- отрицательное Число (Number), если x< y ,
- положительное Число (Number), если x >y ,
- ноль в противном случае.
И вот тут есть нюанс! В стандарте не сделан акцент на тот случай, когда мы не передаём параметры в функцию сравнения ( comparefn ). Нам просто сказали, что функция сравнения ( comparefn ) должна возвращать какие-то числа. И всё.
Что нам мешает воспользоваться такой конструкцией, которая будет выдавать либо отрицательное, либо положительное, либо ноль? Ничего! В JavaScript как раз существует такая конструкция — это Math . random ()-0.5.
Почему «-0.5»? Ответ. Только в таком выражении мы можем получать случайные положительные или отрицательные числа в пределах длины 1. Мы знаем что Math . random () даёт нам только положительные числа в диапазоне между 0 и 1, но не включая один. Если так всё и оставить, то мы всегда будем получать только положительные числа — в результате не будет происходить перестановка элементов массива так как знаки не чередуются. Чтобы массив перемешивался, знаки чисел должны как-то чередоваться. Именно поэтому нужно вычитать ровно половину (то есть 0.5) для сбалансированного попадания положительных в отрицательные. Например:
Если выпадет 0.7, то получим 0.2, если 0.4, то -0.1.
Как случайным образом поменять местами элементы массива? ( Array shuffle )
Возьмём простой массив для тестов:
var massiv = [100, 101, 102, 103, 104, 105, 106, 107]
Из этого массива мы хотим получить другой массив, чтобы его элементы были перемешаны относительно оригинального массива. Как это сделать?
Нам поможет конструктор Math и его метод метод random() .
Видео
Функция перемешивания массива
function mixarr(arr)< return arr.map(i=>[Math.random(), i]).sort().map(i=>i[1]) >
Запускаем тестирование № 1:
Запускаем тестирование № 2:
Запускаем тестирование № 3:
Метод перемешивания массива
Мы можем расширить стандартный набор методов массивов для класса Array .
Array.prototype.mixarr = function ()< return this.map(i=>[Math.random(), i]).sort().map(i=>i[1]) >
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].mixarr() [4, 10, 9, 7, 1, 5, 2, 6, 8, 3]
Как работает функция и метод? Логика работы
Мы проходим по каждому элементу массива методом map(). На каждом шаге метода мы возвращаем пары вида:
[ случайное число от 0 до 1 (но не 1) , элемент массива (как есть) ]
Таких пар будет ровно столько, сколько элементов в оригинальном массиве.
Когда мы получаем массив из массивов, то теперь можем провести сортировку методом sort() . По-умолчанию он будет сортировать по первому элементу вложенных массивов, которые являются случайными числами. Порядок сортировки не имеет значения т. к. любая сортировка автоматически перемешает пары, а значит второй элемент в паре уже будет не на своём первоначальном месте.
После перемешивания пар нам останется только удалить первые элементы внутренних массивов, которые по сути не имеют информационного смысла и нужны только для работы алгоритма. «Удаляем» — это возвращаем только вторые элементы внутренних массивов.
Итог
Элементы массива перемешиваются. Функция меняет местами элементы массива и возвращает новый массив без повреждения оригинального.