Подтвердить что ты не робот

Обмен двумя элементами в массиве javascript

Возможный дубликат:
Элементы массива подкачки Javascript

У меня есть такой массив:

this.myArray = [0,1,2,3,4,5,6,7,8,9];

Теперь, что я хочу сделать, позиции позиции двух позиций дают свои позиции. Например, я хочу поменять элемент 4 (который равен 3) с пунктом 8 (который равен 7) Это должно привести к:

this.myArray = [0,1,2,7,4,5,6,3,8,9];

Как я могу это достичь?

4b9b3361

Ответ 1

Просто переназначьте элементы, создав промежуточную переменную, чтобы сохранить первую запись, которую вы переписываете:

var swapArrayElements = function(arr, indexA, indexB) {
  var temp = arr[indexA];
  arr[indexA] = arr[indexB];
  arr[indexB] = temp;
};
// You would use this like: swapArrayElements(myArray, 3, 7);

Если вы хотите, чтобы это было проще в использовании, вы можете даже добавить это в встроенный прототип Array (как предлагает kennebec @); однако, имейте в виду, что это, как правило, плохой шаблон, который следует избегать (поскольку это может создавать проблемы, когда несколько разных библиотек имеют разные представления о том, что принадлежит встроенным типам):

Array.prototype.swap = function(indexA, indexB) {
   swapArrayElements(this, indexA, indexB);
};
// You would use this like myArray.swap(3, 7);

Обратите внимание, что это решение значительно более эффективно, чем альтернатива, используя splice(). (O (1) vs O (n)).

Ответ 2

Возвращаемое значение из сплайсинга - это элемент (ы), который был удален -

нет необходимости в переменной temp

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

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

alert(arr.swapItems(3, 7));

возвращаемое значение: (массив)

    0,1,2,7,4,5,6,3,8,9

Ответ 3

Вы можете просто использовать временную переменную для перемещения вещей, например:

var temp = this.myArray[3];
this.myArray[3] = this.myArray[7];
this.myArray[7] = temp;

Вы можете проверить это здесь или в форме функции:

Array.prototype.swap = function(a, b) {
  var temp = this[a];
  this[a] = this[b];
  this[b] = temp;
};

Тогда вы просто назовете это следующим образом:

this.myArray.swap(3, 7);

Вы можете протестировать эту версию здесь.