如何在数组中交换给定索引号的位置(javascript)

时间:2017-01-16 17:44:39

标签: javascript arrays

我在学校练习时遇到了麻烦。

我们必须在给定两个索引的数组中交换两个数字。 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;
}

3 个答案:

答案 0 :(得分:1)

由于你有需要交换的数组的索引,你不必切片和遍历数组元素来做到这一点。 只需将其中一个索引值保存在临时变量中,然后重新分配值,如下所示:

&#13;
&#13;
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;
&#13;
&#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));