我在学校练习时遇到了麻烦。
我们必须在给定两个索引的数组中交换两个数字。 Here are the test cases.
这是我的代码:
function swap(xs, i, j) {
var copyxs = xs.slice(0);
for (var a = 0; a < xs.length - 1; a++) {
if (xs.indexOf(copyxs[a]) == i) {
xs[a] = copyxs[j];
}
if (xs.indexOf(copyxs[a]) == j) {
xs[a] = copyxs[i];
}
}
return xs;
}
答案 0 :(得分:1)
由于你有需要交换的数组的索引,你不必切片和遍历数组元素来做到这一点。 只需将其中一个索引值保存在临时变量中,然后重新分配值,如下所示:
function swap (xs, i, j){
var temp = xs[j];
xs[j] = xs[i];
xs[i] = temp;
return xs;
}
console.log(swap([1,2,3], 0, 1))
&#13;
答案 1 :(得分:1)
无需slice
数组,您只需重新分配给定索引处的值:
function swap(arr, i, j) {
var temp = arr[i]; //temporarily store original value at i position
arr[i] = arr[j]; //reassign value at i position to be value at j position
arr[j] = temp; //reassign value at j position to original value at i position
return arr;
}
答案 2 :(得分:1)
如果您的老师不需要您修改输入数组,您可以使用地图执行此操作。
var input = [1,2,3,4,5,6];
var swap = (xs, i, j) => xs.map((x,index,arr) => {
if (index === i) return arr[j];
if (index === j) return arr[i];
return x;
});
console.log(swap(input, 2, 4));
var input = [1,2,3,4,5,6];
function swap(xs, i, j) {
return xs.map((x,index,arr) => {
if (index === i) return arr[j];
if (index === j) return arr[i];
return x;
});
}
console.log(swap(input, 2, 4));