Для двух или более элементов (фиксированное число)
[list[y], list[x]] = [list[x], list[y]];
Временная переменная не требуется!
Я думал просто позвонить list.reverse()
.
Но потом я понял, что он будет работать как своп, только когда list.length = x + y + 1
.
Для переменного количества элементов
Я рассмотрел различные современные конструкции Javascript на этот счет, включая Map и map , но, к сожалению, ни один из них не привел к созданию кода, который был бы более компактным или более быстрым, чем этот старый модная конструкция на основе петель:
function multiswap(arr,i0,i1) {/* argument immutable if string */
if (arr.split) return multiswap(arr.split(""), i0, i1).join("");
var diff = [];
for (let i in i0) diff[i0[i]] = arr[i1[i]];
return Object.assign(arr,diff);
}
Example:
var alphabet = "abcdefghijklmnopqrstuvwxyz";
var [x,y,z] = [14,6,15];
var output = document.getElementsByTagName("code");
output[0].innerHTML = alphabet;
output[1].innerHTML = multiswap(alphabet, [0,25], [25,0]);
output[2].innerHTML = multiswap(alphabet, [0,25,z,1,y,x], [25,0,x,y,z,3]);
<table>
<tr><td>Input:</td> <td><code></code></td></tr>
<tr><td>Swap two elements:</td> <td><code></code></td></tr>
<tr><td>Swap multiple elements: </td> <td><code></code></td></tr>
</table>