是否有更简单的方法来交换数组中的两个元素?
var a = list[x], b = list[y];
list[y] = a;
list[x] = b;
是否有更简单的方法来交换数组中的两个元素?
var a = list[x], b = list[y];
list[y] = a;
list[x] = b;
当前回答
考虑这样一个解决方案,不需要定义第三个变量:
函数swap(arr, from, to) { 加勒比海盗。拼接(from, 1, arr.)Splice (to, 1, arr[from])[0]); } Var字母= ["a", "b", "c", "d", "e", "f"]; 交换(字母,1,4); console.log(字母);// ["a", "e", "c", "d", "b", "f"]
注意:您可能希望添加额外的检查,例如数组长度检查。这个解决方案是可变的,所以交换函数不需要返回一个新的数组,它只是对传入的数组进行突变。
其他回答
这似乎还可以....
var b = list[y];
list[y] = list[x];
list[x] = b;
不管用
var b = list[y];
意味着变量b将在作用域的其余部分出现。这可能会导致内存泄漏。不太可能,但还是最好避免。
也许把这个放到array。prototype。swap中是个好主意
Array.prototype.swap = function (x,y) {
var b = this[x];
this[x] = this[y];
this[y] = b;
return this;
}
它可以被称为:
list.swap( x, y )
这是一种既避免内存泄漏又避免DRY的干净方法。
Flow
不是就地解决方案
let swap= (arr,i,j)=> arr.map((e,k)=> k-i ? (k-j ? e : arr[i]) : arr[j]);
让swap= (arr,i,j)=> arr.map((e,k)=> k-i ?(k-j ?E: arr[i]): arr[j]); //测试指数:3<->5 (= 'f'<->'d') 设a= ["a","b","c","d","e","f","g"]; 设b= swap(a,3,5); console.log(“\ n”,b); console.log(示例流:,交换(a, 3, 5) .reverse () . join (' - '));
就地解决方案
Let swap= (arr,i,j)=> {Let t=arr[i];arr[我]= arr [j];加勒比海盗[j] = t;返回arr} //测试指数:3<->5 (= 'f'<->'d') 设a= ["a","b","c","d","e","f","g"]; Console.log (swap(a,3,5)) console.log(示例流:,交换(a, 3, 5) .reverse () . join (' - '));
在这个解决方案中,我们使用“流模式”,这意味着swap函数返回数组作为结果-这允许轻松地继续使用dot处理。(比如reverse和join在片段中)
那么Destructuring_assignment呢
var arr = [1, 2, 3, 4]
[arr[index1], arr[index2]] = [arr[index2], arr[index1]]
还可以推广到
[src order elements] => [dest order elements]
对于数值,可以使用按位的异或来避免临时变量
list[x] = list[x] ^ list[y];
list[y] = list[y] ^ list[x];
list[x] = list[x] ^ list[y];
或算术和(注意,这仅适用于x + y小于数据类型的最大值时)
list[x] = list[x] + list[y];
list[y] = list[x] - list[y];
list[x] = list[x] - list[y];
试试这个功能…
$(document).ready(function () { var pair = []; var destinationarray = ['AAA','BBB','CCC']; var cityItems = getCityList(destinationarray); for (var i = 0; i < cityItems.length; i++) { pair = []; var ending_point = ""; for (var j = 0; j < cityItems[i].length; j++) { pair.push(cityItems[i][j]); } alert(pair); console.log(pair) } }); function getCityList(inputArray) { var Util = function () { }; Util.getPermuts = function (array, start, output) { if (start >= array.length) { var arr = array.slice(0); output.push(arr); } else { var i; for (i = start; i < array.length; ++i) { Util.swap(array, start, i); Util.getPermuts(array, start + 1, output); Util.swap(array, start, i); } } } Util.getAllPossiblePermuts = function (array, output) { Util.getPermuts(array, 0, output); } Util.swap = function (array, from, to) { var tmp = array[from]; array[from] = array[to]; array[to] = tmp; } var output = []; Util.getAllPossiblePermuts(inputArray, output); return output; } <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>