Элементы массива подкачки Javascript - PullRequest
172 голосов
/ 16 мая 2009

Есть ли более простой способ поменять два элемента в массиве?

var a = list[x], b = list[y];
list[y] = a;
list[x] = b;

Ответы [ 27 ]

0 голосов
/ 22 мая 2018

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

Дано:

var foo = [ 0, 1, 2, 3, 4, 5, 6 ];

если вы хотите поменять местами значения двух индексов (a и b); тогда это будет сделано:

foo.splice( a, 1, foo.splice(b,1,foo[a])[0] );

Например, если вы хотите поменять местами 3 и 5, вы можете сделать это следующим образом:

foo.splice( 3, 1, foo.splice(5,1,foo[3])[0] );

или

foo.splice( 5, 1, foo.splice(3,1,foo[5])[0] );

Оба дают одинаковый результат:

console.log( foo );
// => [ 0, 1, 2, 5, 4, 3, 6 ]

# splicehatersarepunks:)

0 голосов
/ 21 июня 2018

Если вы не хотите использовать временную переменную в ES5, это один из способов поменять элементы массива.

var swapArrayElements = function (a, x, y) {
  if (a.length === 1) return a;
  a.splice(y, 1, a.splice(x, 1, a[y])[0]);
  return a;
};

swapArrayElements([1, 2, 3, 4, 5], 1, 3); //=> [ 1, 4, 3, 2, 5 ]
0 голосов
/ 11 марта 2016
Array.prototype.swap = function(a, b) {
  var temp = this[a];
  this[a] = this[b];
  this[b] = temp;
};

Использование:

var myArray = [0,1,2,3,4...];
myArray.swap(4,1);
0 голосов
/ 08 июля 2018

Замена первого и последнего элемента в массиве без временной переменной или метода обмена ES6 [a, b] = [b, a]

[a.pop(), ...a.slice(1), a.shift()]

0 голосов
/ 16 июля 2016

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

array.unshift( array.pop() );
0 голосов
/ 21 мая 2019

Используя ES6 , можно сделать это так ...

Представьте, что у вас есть эти 2 массива ...

const a = ["a", "b", "c", "d", "e"];
const b = [5, 4, 3, 2, 1];

и вы хотите поменять местами первые значения:

const [a0] = a;
a[0] = b[0];
b[0] = a0;

и значение:

a; //[5, "b", "c", "d", "e"]
b; //["a", 4, 3, 2, 1]
0 голосов
/ 25 ноября 2015

Вот вариант, который сначала проверяет, существует ли индекс в массиве:

Array.prototype.swapItems = function(a, b){
    if(  !(a in this) || !(b in this) )
        return this;
    this[a] = this.splice(b, 1, this[a])[0];
    return this;
}

В настоящее время он просто вернет this, если индекс не существует, но вы можете легко изменить поведение при ошибке

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