Обмен двумя элементами в массиве 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];
Как я могу это достичь?
Ответы
Ответ 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);
Вы можете протестировать эту версию здесь.